java - 合并文件时BufferOutputStream写入零字节

标签 java io fileinputstream bufferedinputstream bufferedoutputstream

我正在尝试将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 。该方法不能保证填充缓冲区。它返回一个值,告诉您它读取了多少字节。您应该使用它,在这种情况下,您应该在决定要写入多少字节(如果有)时使用它。

关于java - 合并文件时BufferOutputStream写入零字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11467867/

相关文章:

c# - 在 C# 上使用 CreateFile 返回 isInvalid = true

python - 读/写一个文件,其中每一行都是一个字典的列表

java - 如何使用 java 在 REST Web 服务中复制 zip 和其他文件

java - 尝试加载独立于平台的文件

java - Maven 部署到快照而不是发布

java - 在实现 Iterable 接口(interface)时,iterator() 方法不应该返回集合的克隆吗?

Java,关于开关和案例的问题?

java - 非运行时分配方案——ArrayList

java - ListResourceBundle 实现的值中包含 null

java - 当文件大小发生变化时,Struts DiskFile.getInputStream() 返回 ByteArrayInputStream 和 FileArrayInputStream