Java:使用FileUtils将大文件从一个文件夹移动到另一个文件夹

时间:2017-12-07 08:35:04

标签: java filesystems fileutils

我有一个在Windows机器上的Tomcat应用程序服务器上运行的Java Web应用程序,它以zip格式从sFTP服务器下载文件。接下来,它将文件解压缩到解压缩的文件夹,最后将文件复制到等待处理的传入文件夹。文件非常大(+ 1Gb)

我遇到的问题是将文件从解压缩文件夹移动到传入文件夹: 我使用Apache FileUtils在Java中将一个目录的所有内容移动到另一个目录:

public static List<String> moveFolderContent(File incomingFolder, File destinationFolder) throws IOException {
    List<String> errorList = new ArrayList<>();
    for (final File fileEntry : incomingFolder.listFiles()) {
        if (fileEntry.isDirectory()) {
            moveFolderContent(fileEntry, destinationFolder);
        } else {
            errorList.add(fileEntry.getName());
            FileUtils.copyFileToDirectory(fileEntry, destinationFolder);
            FileUtils.forceDelete(fileEntry);
        }
    }
    return errorList;
}

但是我得到以下例外:

06-12-2017 | 06:01:52,188 | ERROR | TaskUtils$LoggingErrorHandler  | Unexpected error occurred in scheduled task.
java.io.IOException: Unable to delete file: S:\Pwg\individuals\unzipped\Snapshot_professional_nurse_v16.xml
     at org.apache.commons.io.FileUtils.forceDelete(FileUtils.java:2279)

我看起来原始文件仍在使用中,而我希望FileUtils.copyFileToDirectory方法在复制过程完成时完成,释放两个文件的锁定然后继续执行forceDelete方法...

我也尝试过:

FileUtils.copymoveFileToDirectory(fileEntry, destinationFolder, false);

这可能更干净,但这给了我完全相同的例外:(

0 个答案:

没有答案