【问题标题】:Unable to copy the end portion of one file to another using BufferedWriter无法使用 BufferedWriter 将一个文件的结尾部分复制到另一个文件
【发布时间】:2014-04-23 22:04:57
【问题描述】:

已编辑: 实际错误是 File1 的内容与其他一些文本行完全复制到 File2 + 中。文件很大。所以这个问题必须相应地改写。但是,答案是正确的。它解决了这个问题。多余的行被删除。

代码片段:

 public class ReadAFile {
    public static void main(String[] args) throws IOException {
        File file = new File("primes.txt");
        FileReader reader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(reader);

        BufferedWriter writer = new BufferedWriter(new FileWriter(new File("primesFile.txt")));
        char[] buffer = new char[1024];
        int read;
        while ((read = bufferedReader.read(buffer)) > 0) {
            writer.write(buffer, 0, buffer.length);
        }
        writer.close();
        bufferedReader.close();
    }
}

【问题讨论】:

    标签: java-io bufferedwriter


    【解决方案1】:
        while ((read = bufferedReader.read(buffer)) > 0) {
            writer.write(buffer, 0, buffer.length);
        }
    

    常见错误。您假设 read() 填充了缓冲区。请参阅 Javadoc。您需要在 write 方法中使用读取计数:

        while ((read = bufferedReader.read(buffer)) > 0) {
            writer.write(buffer, 0, read);
        }
    

    但除非您确定文件是文本,否则您应该使用流,而不是读取器和写入器。

    【讨论】:

    • 请阅读编辑后的问题。我正在测试读取的值。读取的最后一个值是 667。不是 1024。那么,为什么将不必要的行写入第二个文件?
    • 因为您在上次读取时未读取的缓冲区末尾写了垃圾。它是上次阅读时遗留下来的。
    猜你喜欢
    • 2018-08-08
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多