在 Java 中将文本文件数据转换为大写

Convert text file data into uppercase in Java

我在 java 中制作了将文件中的文本转换为大写的程序,但它擦除数据而不是转换它

但是当我从一个文件中取出数据并将转换后的数据写入另一个文件时,它工作正常。

所以我遇到了一个问题,我该如何使用单个文件来做到这一点。

下面是我的代码,告诉我如何更正这个?

import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.FileWriter;


public class uppercase{

    public static void main(String[] args) {
    
    try {
        FileReader reader = new FileReader("e.txt");
        FileWriter writer = new FileWriter("e.txt");

        int data;
        int data2;
        while((data=reader.read())!= -1) {
          data2=Character.toUpperCase(data);
          writer.write(data2);
        }
        reader.close();
        writer.close();

        
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
  }
}

这是个坏主意,因为您写入的文件与您正在读取的文件相同。您应该:

  • 将完整的文件加载到内存,关闭它,然后将其转储到同一文件。
  • 保存到不同的文件并重命名(更好)

首先你打开一个流来从文件中读取并将结果附加到一个 String 变量,在读取结束时,你将所有数据写入文件:

try {
    FileReader reader = new FileReader("e.txt");
    String result = "";
    int data;
    int data2;
    while ((data = reader.read()) != -1) {
        data2 = Character.toUpperCase(data);
        result += (char)data2;
    }
    reader.close();
    System.out.println(result);
    FileWriter writer = new FileWriter("e.txt");
    writer.write(result);
    writer.flush();
    writer.close();

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}