使用FileUtils.copyFile复制文件

Bis*_*128 5 java copy exception file

我试图使用文件utils复制文件方法复制文件.我正在遇到一些有时会抛出异常的问题

java.io.IOException: Failed to copy full contents from 'path.xml' to localfile.xml

我已经google搜索并在代码中看到当目标文件长度与目标文件长度不同时抛出此异常,异常仅发生一些时间 - 这可能是由于我尝试复制的文件是一致的更新,所以我可能会在更新中捕获它(只是一个值更改的xml文件)

如果我把呼叫包裹在一个if(target.canRead())但是这似乎没什么区别.

有人可以帮忙吗?

*更新:*我无法锁定文件,因为它是通过第三方供应商写入的,这会导致各种问题.

Sub*_*Sao 1

我不确定该架构是如何在您的项目中实现的,但您应该在文件上有一个锁定机制。

当有人写入文件时,它应该锁定它。并且您不应该在写入时对其进行复制,即它被锁定。

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();
}
Run Code Online (Sandbox Code Playgroud)

请参阅此处有关如何在 java 中锁定文件的问题。

更新

然后,您别无选择,只能自己实现复制方法或使用没有类似检查的库。

可以看FileUtils的代码

如果文件在复制过程中发生变化,则会报错。

        if (srcFile.length() != destFile.length()) {
            throw new IOException("Failed to copy full contents from '" +
                    srcFile + "' to '" + destFile + "'");
        }
Run Code Online (Sandbox Code Playgroud)