为什么引入FileWriter会删除文件中的所有内容?

时间:2016-03-09 09:30:36

标签: java string file-io

我有一个文本文件,里面有一些文字,我打算替换文本文件中的某些字符。因此,我必须使用包装文件阅读器的缓冲读取器来读取文件。

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");

为什么会这样?我是否按照正确的方法编辑文本文件中的字符?

或者还有其他方法吗?

谢谢。

4 个答案:

答案 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();

这将关闭它,然后它不会删除文件中的任何内容。 :)