我有一个将某个文件写入目录的外部程序。文件大约每分钟编写一次。我写了一个程序来读取这些文件,处理它们并重命名文件后(实际上我在另一个目录中创建了一个文件副本,以便它不会被再次处理)。我通过
搜索目录中最旧的文件Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR)
我的重命名文件代码非常简单
File fileRenamed = new File(PATH_FILES + "processed\\" + oldestFile.getName() + ".processed");
try {
if (oldestFile.renameTo(fileRenamed)) {
LOGGER.info(" file renamed");
} else {
LOGGER.info(" file NOT renamed!");
}
} catch (SecurityException sex) {
LOGGER.severe("security exception in file " + oldestFile.getName());
}
如您所见,我重命名该文件并将其复制到另一个目录(“已处理”)。通常一切正常,但有时重命名失败。我想是因为外部进程还没有完成编写它,同时我尝试重命名它。我的问题是:可能知道为什么重命名失败以及如何处理这种情况?如果文件已锁定,我该如何解锁?