使用FileUtils.copyFile复制文件
我想使用文件utils复制文件方法复制文件。我正在运行中的一些问题,其中一个例外是有时抛出使用FileUtils.copyFile复制文件
java.io.IOException: Failed to copy full contents from 'path.xml' to localfile.xml
我用Google搜索,并在代码中看出,这个例外是当目标文件长度是到目标文件长度不同的抛出,异常只发生了一些时间 - 这可能是由于我试图复制的文件是持续更新的事实,所以我可能会捕获它中间更新(只是一个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中锁定一个文件。
UPDATE
你那么别无选择,只能自己实现或使用不具有类似的检查库复制方法离开。
你可以看到FileUtils
的代码,如果复制过程中文件更改它会给错误。
if (srcFile.length() != destFile.length()) { throw new IOException("Failed to copy full contents from '" +
srcFile + "' to '" + destFile + "'");
}
回答:
就像你说的那样,在复制过程中文件可能会被更新,所以你应该被要求在你想复制的文件上获得文件锁定。
我建议您阅读this question以获取有关如何使用FileLock
的一些详细信息。
回答:
我有同样的问题(大文件)在Java 7中使用文件解析:
File srcFile = ... File destFile = ...
File directory = ...
if (!Files.exists(directory.toPath())) {
// use forceMkdir to create parent directory
FileUtils.forceMkdir(directory);
}
Files.copy(srcFile.toPath(), new FileOutputStream(destFile));
以上是 使用FileUtils.copyFile复制文件 的全部内容, 来源链接: utcz.com/qa/261715.html