使用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

回到顶部