使用java将内容从一个文件复制到多个文件 FileInputStream Fread=newfileinputstream(“somefilename”); FileOutputStream Fwrite=null; 对于(int i=1;i

使用java将内容从一个文件复制到多个文件 FileInputStream Fread=newfileinputstream(“somefilename”); FileOutputStream Fwrite=null; 对于(int i=1;i,java,file,Java,File,您必须创建多个FileOutputStreamfwrite1,fwrite2,fwrite3,每个要写入的文件一个实例,然后在读取时,只需写入所有实例。这就是实现的方法。添加这一行: FileInputStream Fread = new FileInputStream("somefilename"); FileOutputStream Fwrite = null; for (int i = 1; i <= 5; i++) { String fileName = "file"

您必须创建多个
FileOutputStream
fwrite1
fwrite2
fwrite3
,每个要写入的文件一个实例,然后在读取时,只需写入所有实例。这就是实现的方法。

添加这一行:

FileInputStream Fread = new FileInputStream("somefilename"); 
FileOutputStream Fwrite = null;

for (int i = 1; i <= 5; i++)
{
    String fileName = "file" + i + ".txt";
    Fwrite = new FileOutputStream(fileName);
    int c; 

    while ((c = Fread.read()) != -1) 
    {
        Fwrite.write((char) c);
    }

    Fwrite.close();
}

Fread.close();
Fwrite.close()之后;

并将第一行代码更改为:

Fread.reset();

FRead
流一次到达末尾,然后就没有什么东西可以让它从头开始了。 要解决此问题,您可以:

  • 每次写入文件后调用
    FRead.reset()
  • FRead
    的值缓存到某个位置,并从此源写入
    FWrite
  • 创建
    FileOutputStream
    的数组/集合,并在迭代期间将每个字节写入其中
推荐的解决方案当然是第一个

您的代码中还存在一些问题:

  • 强烈建议您使用try with RESOURCE作为流,因为它们应该安全关闭
  • 您似乎没有遵循命名约定,即在lowerCamelCase中命名变量
FYI:请注意,您使用的方法返回的是
字节,而不是
字符,因此调用
write((char)c)
应该是正确的


要在复制文件时并行写入多个文件,请为目标文件创建一个输出流数组,然后迭代该数组以将数据写入所有文件

为了获得更好的性能,您应该始终使用缓冲区来执行此操作。一次写入一个字节不会有好的效果

InputStream Fread = new BufferedInputStream(new FileInputStream("somefilename"));
Fread.mark(0);
public static void copytomultiple文件(字符串填充、字符串…输出文件)引发IOException{
OutputStream[]outStreams=新的OutputStream[outFiles.length];
试一试{
对于(int i=0;i0;)
for(输出流外流:外流)
输出流写入(buf,0,len);
}
}最后{
for(输出流外流:外流)
如果(超出流!=null)
exptream.close();
}
}

对于每个输出文件,您需要返回到输入文件的开头。@ScottHunter为什么?您说的是多次读取,而不是写入,为什么他不能在读取时生成3个输出流并写入所有输出流?我不是说他不能这样做,也不是说他不应该这样做;这只是对程序的一个更大的更改。它会产生错误线程“main”java.io.IOException中的异常:java.io.InputStream.reset不支持标记/重置(未知源)@ShubhamSiddhartha我认为Mahozard和vikas tandon的答案没有抓住你问题的重点。这可能会起作用,但效率低下,因为它会多次读取输入文件。Andreas的答案是正确和有效的。只需对原始代码进行最小修改即可得到简单的答案:)outputstream需要缓冲吗?我如何在for循环中做到这一点,如果循环运行100次,所以我认为它不会有效呢solution@ShubhamSiddhartha它比每次从一个文件中读取然后写入另一个文件更有效。你在考虑运行多个线程来写东西吗?你的问题中没有提到这一点。
public static void copyToMultipleFiles(String inFile, String... outFiles) throws IOException {
    OutputStream[] outStreams = new OutputStream[outFiles.length];
    try {
        for (int i = 0; i < outFiles.length; i++)
            outStreams[i] = new FileOutputStream(outFiles[i]);
        try (InputStream inStream = new FileInputStream(inFile)) {
            byte[] buf = new byte[16384];
            for (int len; (len = inStream.read(buf)) > 0; )
                for (OutputStream outStream : outStreams)
                    outStream.write(buf, 0, len);
        }
    } finally {
        for (OutputStream outStream : outStreams)
            if (outStream != null)
                outStream.close();
    }
}