FileInputStream.read()vs FileOutputStream.write()

时间:2018-05-15 16:52:06

标签: java io stream

我尝试制作一个复制文件的简单程序。根据文档,FileInputStream.read()FileOuputStream.write()似乎与我相似。它们分别从文件读取和写入int。那么,为什么以下不起作用?

import java.io.*;

class CopyFile {
    public static void main(String[] args) throws IOException {
        FileInputStream original = new FileInputStream(args[0]);
        FileOutputStream copy = new FileOutputStream(args[1]);
        while (original.read() != -1) {
            copy.write(original.read());
        }
    }
}

生成的文件与原始文件完全不同。为什么这不像我预期的那样工作?

1 个答案:

答案 0 :(得分:0)

看看你的代码:

    while (original.read() != -1) {
        copy.write(original.read());
    }

您读取一个字节来测试它是否为文件末尾,然后您读取另一个要写入的字节。

因此,跳过在while条件下读取的字节。

正确的方法是:

    int b;
    while ((b=original.read()) != -1) {
        copy.write(b);
    }