我有一个文本文件,里面有一些文字,我打算替换文本文件中的某些字符。因此,我必须使用包装文件阅读器的缓冲读取器来读取文件。
File file = new File("new.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
while ((line = br.readLine()) != null ) {
System.out.println(line);
}
但是由于我必须编辑字符,我必须引入文件编写器并添加具有名为replace all的字符串方法的代码。因此整体代码如下所示。
File file = new File("new.txt");
FileWriter fw = new FileWriter(file);
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
while ((line = br.readLine()) != null ) {
System.out.println(line);
fw.write(br.readLine().replaceAll("t", "1") + "\n");
}
问题是当我向代码引入文件编写器时(只需要初始化部分,当我运行程序时,它会删除文件中的内容而不管添加以下行)
fw.write(br.readLine().replaceAll("t", "1") + "\n");
为什么会这样?我是否按照正确的方法编辑文本文件中的字符?
或者还有其他方法吗?
谢谢。
答案 0 :(得分:1)
public FileWriter(String fileName, boolean append)
参数:
fileName - String依赖于系统的文件名。
append - 布尔值如果为true,则数据将被写入 文件而不是开头。
附加数据使用
new FileWriter(file, true);
答案 1 :(得分:0)
问题是,当您正在从中读取文件时,您正试图写入该文件。更好的解决方案是创建第二个文件,将转换后的数据放入其中,然后在完成后用它替换第一个文件。或者,如果您不想这样做,请首先从文件中读取所有数据,然后打开它进行写入并写入转换后的数据。
另外,您是否考虑过使用文本处理语言解决方案,例如awk,sed或perl:https://unix.stackexchange.com/questions/112023/how-can-i-replace-a-string-in-a-files
答案 2 :(得分:0)
您需要先读取文件,然后,只有在读完整个文件后,才能写入文件。
或者您打开另一个文件进行写入,然后用新文件替换旧文件。
原因是,一旦开始写入文件,它就会被截断(文件中的数据被删除)。 避免这种情况的唯一方法是以“追加”模式打开文件。使用该模式,您开始在文件末尾写入,因此您不会删除其内容。但是,您将无法修改现有内容,只会添加内容。
答案 3 :(得分:0)
最后添加:
fw.close();
这将关闭它,然后它不会删除文件中的任何内容。 :)