java - 使用 FileUtils.copyFile 复制文件

标签 java file exception copy

我正在尝试使用文件实用程序复制文件方法来复制文件。我遇到了一些有时会抛出异常的问题

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/

相关文章:

java - 如何在Exception的stackTrace中找到自己编码的类或过程

java - 以下代码不适用于 Chrome 浏览器

java - 输入文本时覆盖 Swing 文本标签

java - 从java中的URL读取UTF-8编码的XML

java - 文本文件数组

exception - 将 TextureAddressMode 设置为 Clamp for XNA Reach

Java 循环显示 SQL 国家/地区表中的多种语言

file - PyQt 打开文件对话框 - 显示路径名称

c++ - 如何从txt文件C++中读取特定数字

java - 如何避免Java中的 "Exception in thread "main“java.util.ConcurrentModificationException”错误