合并文件时,BufferedOutputStream写零字节

2019年3月22日 22点热度 0条评论

我正在尝试将n个文件合并为单个文件。但是我的功能出现了奇怪的行为。该函数在n秒内被调用x次。假设我有100个要合并的文件,每秒钟我调用5个文件并将其合并。在下一秒中,该数量加倍为10,但是从1-5开始是与之前相同的文件,其余为新文件。它正常工作,但在某些情况下,它给出零字节或有时给出正确的大小。

您能帮我在下面的函数中发现错误吗?

public void mergeFile(list<String> fileList, int x) {
    int count = 0;
    BufferedOutputStream out = null;
    try {
        out = new BufferedOutputStream(new FileOutputStream("Test.doc"));
        for (String file : fileList) {
            InputStream in = new BufferedInputStream(new FileInputStream(file));
            byte[] buff = new byte[1024];
            in.read(buff);
            out.write(buff);
            in.close();
            count++;
            if (count == x) {
                break;
            }
        }
        out.flush();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

*对不起我的英语不好

解决方案如下:

in.read(buff);

检查Javadoc。该方法不能保证填充缓冲区。它返回一个值,该值告诉您读取了多少字节。您应该使用它,在这种情况下,当决定要写入多少个字节(如果有)时,应该使用它。