【问题标题】:BufferedReader to BufferedWriterBufferedReader 到 BufferedWriter
【发布时间】:2011-10-28 17:29:29
【问题描述】:

如何从BufferedReader 获取BufferedWriter

我希望能够做这样的事情:

BufferedReader read  = new BufferedReader(new InputStreamReader(...));
BufferedWriter write = new BufferedWriter(read);

【问题讨论】:

    标签: java bufferedreader bufferedwriter


    【解决方案1】:

    JAVA 9 更新

    从 Java 9 开始,Reader 提供了一个名为 transferTo 的方法,其签名如下:

    public long transferTo(Writer out)  throws IOException
    

    如文档所述,transferTo 将:

    从该读取器读取所有字符,并按照读取顺序将字符写入给定写入器。返回时,此阅读器将位于流的末尾。此方法不会关闭读取器或写入器。 此方法可能会无限期地阻止从读取器读取或写入写入器。读取器和/或写入器异步关闭或线程在传输期间中断的情况下的行为是高度特定于读取器和写入器的,因此未指定。

    如果从读取器读取或写入写入器时发生 I/O 错误,则可能在读取或写入某些字符后发生。因此,阅读器可能不在流的末尾,并且一个或两个流可能处于不一致的状态。如果发生 I/O 错误,强烈建议立即关闭这两个流。

    因此,为了将 Java Reader 的内容写入 Writer,您可以编写:

    reader.transferTo(writer);
    

    【讨论】:

      【解决方案2】:

      您可以使用管道读取/写入器 (link)。这正是它们的设计目的。不确定您是否可以将它们重新配置到您通过的现有缓冲阅读器上。您必须自己围绕它构建 buf 阅读器。

      【讨论】:

        【解决方案3】:

        BufferedWriter 构造函数没有为接受读者重载,对吧? Buhb 说的是对的。

        BufferedWriter  writer = new BufferedWriter(
        new FileWriter("filename_towrite"));    
        
        IOUtils.copy(new InputStreamReader(new FileInputStream("filename_toread")), writer);
        writer.flush();
        writer.close();
        

        【讨论】:

        • 它说方法副本对于类型字符串来说是欠精细的
        【解决方案4】:

        如果你想知道会发生什么:

        所有来自阅读器的输入都被复制到输入流中

        类似的东西:

         private final void copyInputStream( InputStreamReader in, OutputStreamWriter out )      throws IOException
          {
            char[] buffer=new char[1024];
            int len;
            while ( ( len=in.read(buffer) ) >= 0 )
              {
              out.write(buffer, 0, len);
              }
          }
        

        更多关于The Really big Index的输入和输出

        【讨论】:

          【解决方案5】:

          您可以使用 Apache commons io 中的以下内容:

          IOUtils.copy(reader, writer);
          

          网站here

          【讨论】:

          • 请添加对 apache.commons 的引用以完善此答案。
          • 嗨,Buhb,它说“方法副本对于类型字符串来说不足”。我想我做错了什么,但我不知道是什么?
          • 我假设您想将阅读器的内容写入作者。您必须创建引用您要写入的内容的编写器。有了 writer 后,就可以使用上面的 copy 方法从 reader 那里复制了。
          猜你喜欢
          • 2012-03-20
          • 1970-01-01
          • 2015-11-17
          • 1970-01-01
          • 1970-01-01
          • 2011-04-03
          • 2014-01-07
          • 2014-05-14
          • 1970-01-01
          相关资源
          最近更新 更多