Java 无法重命名文件

Java 无法重命名文件,java,file-rename,Java,File Rename,我有一个外部程序,可以将一些文件写入目录。文件大约每分钟写入一次。我编写了一个程序,读取这些文件,处理它们,然后重命名文件(实际上我在另一个目录中创建了一个文件副本,以便不再处理它)。我通过搜索目录中最旧的文件 Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR) 我的重命名文件的代码非常简单 File fileRenamed = new File(PATH_FILES + "processed\\" +

我有一个外部程序,可以将一些文件写入目录。文件大约每分钟写入一次。我编写了一个程序,读取这些文件,处理它们,然后重命名文件(实际上我在另一个目录中创建了一个文件副本,以便不再处理它)。我通过搜索目录中最旧的文件

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());
}

如您所见,我重命名了文件并将其复制到另一个目录(“已处理”)。正常情况下,一切正常,但有时重命名失败。我想这是因为外部进程尚未完成编写,同时我尝试重命名它。我的问题是:是否可能知道重命名失败的原因以及如何处理这种情况?如果文件被锁定,我如何解锁它?

您如何知道它失败了?您是否收到异常,或者它与
的路径
if
条件一起出现?不久前,我看到有人做了一个解决方法:检查LASTMODIFIED,从“NOW”开始超过60秒。这不是保证,但我认为处理锁定文件的大多数问题的简单方法。您是否尝试过使用
move
而不是?根据
renameTo
不可靠,最好使用
move
。顺便说一句,根据您的描述,您的代码应该在下一轮(60秒后)选择有问题的文件这样处理,除非你不想这样耽搁,否则应该没问题@Fildor-对,我链接的问题和答案是,
重命名为
不可靠,不是答案。