我正在尝试使用文件实用程序复制文件方法来复制文件。我遇到了一些有时会抛出异常的问题
java.io.IOException:无法将完整内容从“path.xml”复制到 localfile.xml
我用谷歌搜索并在代码中看到当目标文件长度与目标文件长度不同时会抛出这个异常,这个异常只发生了几次 - 这可能是因为我正在尝试的文件副本不断更新,所以我可能会在更新过程中发现它(只是一个值发生变化的 xml 文件)
如果我将调用包装在 if(target.canRead())
中,但这似乎没什么区别。
有人能帮忙吗?
*更新:*我无法锁定文件,因为它是通过第三方供应商写入的,这会导致各种问题。
最佳答案
我不确定在你的项目中架构是如何实现的,但你应该对文件有一个锁定机制。
当有人正在写入文件时,它应该锁定它。你不应该在它被写入时从它复制,即它被锁定。
FileInputStream in = new FileInputStream(file);
try {
java.nio.channels.FileLock lock = in.getChannel().lock();
try {
Reader reader = new InputStreamReader(in, charset);
...
} finally {
lock.release();
}
} finally {
in.close();
}
看这个问题here关于如何在 java 中锁定文件。
更新
然后您别无选择,只能自己实现复制方法或使用没有类似检查的库。
可以看到FileUtils的代码
复制过程中如果文件发生变化会报错。
if (srcFile.length() != destFile.length()) {
throw new IOException("Failed to copy full contents from '" +
srcFile + "' to '" + destFile + "'");
}
关于java - 使用 FileUtils.copyFile 复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15805303/