使用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中命名变量
字节,而不是字符,因此调用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();
}
}