我有一个在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);
这可能更干净,但这给了我完全相同的例外:(