【问题标题】:why filewriter not working in java?为什么filewriter不能在java中工作?
【发布时间】:2014-02-21 15:43:02
【问题描述】:

我使用FileReader 读取文件并使用FileWriter 读取文件。我看到读取成功(通过打印到console)但没有写入。

代码如下:

public class ReadingIO {

    public static void main(String[] args){
        try {
            processfile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private static void  processfile() throws IOException{
        BufferedReader fi = new BufferedReader(new FileReader("words.txt"));
        Writer out = new BufferedWriter(new FileWriter("testwrite.txt"));
        String b;
        while ((b=fi.readLine())!=null){
            System.out.println(b);
            out.write(b);

        }
    }


}

如果我使用 FileInputStreamFileOutputStream 它可以工作。我想知道 FileWriter 失败的原因,而不是实现此目的的替代方法。

【问题讨论】:

  • 刷新或关闭您的信息流。
  • 我没有关闭FileOutputStream,它起作用了。但FileReader 失败了

标签: java bufferedreader java-io filewriter bufferedwriter


【解决方案1】:

使用Writer时需要调用flush()

FileOutputStream时不需要

Close 在流上调用flush,因此如果要关闭流,则不需要flush。

【讨论】:

  • 但我没有关闭 FileOutputStream,它仍然有效,这是为什么呢?
  • 因为FileOutputStream没有缓冲,所以数据直接写入文件。
  • FileOutputStream 也有一个 close 方法。为什么只有 bufferedStream 是关闭必不可少的?
  • @user1988876 对于所有流来说,关闭是必要的。但是,由于 FileOutputStream 没有缓冲,因此您编写的所有内容都进入了该文件。如果您不关闭或刷新缓冲流/写入器,您将丢失数据。
【解决方案2】:

完成后您需要致电out.flush()

【讨论】:

  • 还有fi.close()out.close()
  • 不一样,只使用.close() 方法,它们会隐式调用.flush(),这样就不太容易记住/搞砸了。
【解决方案3】:

在 while 循环之后添加以下行。

out.close();

这个方法会自动调用flush()方法将数据写入仍然缓冲的文件,然后关闭流。

【讨论】:

  • flush() 是多余的。关闭流会刷新它。
  • 这个想法是你修改你的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2013-04-30
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 2012-07-24
相关资源
最近更新 更多