3 回答
TA贡献1799条经验 获得超9个赞
添加此行:
Fread.reset();
后 Fwrite.close();
并将第一行代码更改为此:
InputStream Fread = new BufferedInputStream(new FileInputStream("somefilename")); Fread.mark(0);
TA贡献1834条经验 获得超8个赞
仅供参考:请注意,read()您使用的方法返回abyte而不是a char,因此调用write((char) c)本来应该是just write(c)。
要在复制文件时并行写入多个文件,请为目标文件创建一个输出流数组,然后迭代该数组以将数据写入所有这些文件。
为了获得更好的性能,您应该始终使用缓冲区来执行此操作。一次写入一个字节效果不佳。
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();
}
}
TA贡献1841条经验 获得超3个赞
该FRead
流取得到最后一次,再没有什么让它从头开始。要解决此问题,您可以:
FRead.reset()
每次写入文件后调用将
FRead
值缓存在某个位置并FWrite
从此源写入创建一个数组/的集合,
FileOutputStream
并在迭代过程中将每个字节写入所有字节
推荐的解决方案当然是第一个。
您的代码中也存在一些问题:
强烈建议您对流使用try-with-resouce,因为应安全关闭它们
您似乎不遵循命名约定,即在lowerCamelCase中命名变量
添加回答
举报