【发布时间】:2019-04-25 22:25:54
【问题描述】:
我有一个将给定输入流写入给定输出流的函数。代码如下。
static void copyStream(InputStream is, OutputStream os) throws IOException {
byte[] buffer = new byte[4096];
int len;
try {
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
}
}
上面的函数就是从这个函数调用的
public static void copyFile(File srcFile, File destFile) throws IOException {
FileInputStream fis = new FileInputStream(srcFile);
try {
FileOutputStream fos = new FileOutputStream(destFile);
try {
**copyStream**(fis, fos);
} finally {
if (fos != null)
fos.close();
}
} finally {
if (fis != null)
fis.close();
}
}
在这个函数中,我一次写入 4 MB。我使用此功能复制图像。有时我会看到未创建目标文件,因此在尝试读取该文件以供将来处理时发生异常。我猜罪魁祸首是没有关闭资源。我的假设好吗?我的功能可能失败的原因是什么?请帮忙
【问题讨论】:
-
文件是在调用此方法之前创建的,所以这里的异常不会阻止文件的创建。
-
有问题或没有问题,你还是应该关闭你的资源。
-
同意。我确实关闭了它们。但是我仍然无法弄清楚为什么访问复制的文件偶尔会引发异常(这个问题非常零星)
-
能否也提供调用者方法?
-
用调用函数更新了问题
标签: java file fileoutputstream