为什么文件重命名会在java中失败

Oma*_*eji 3 java

我有以下Java代码片段:

File directoryToMoveTo = new File(file.getParent()+"_TEMP");
boolean success = file.renameTo(new File(directoryToMoveTo,file.getName()));
if (!success){
    logger.warn("Failed to move [%s] to temp Directory.");
}
Run Code Online (Sandbox Code Playgroud)

file作为参数传递给方法,并且是这样获得的文件数组之一:

File[] files = directory.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        logger.debug(String.format("Testing file [%s]",name));
        boolean passed = name.endsWith(getFileDescription().getFilePattern());
        logger.debug(String.format("Passed [%s]",passed));
        return passed;
    }
});
Run Code Online (Sandbox Code Playgroud)

为什么在第一个片段中成功为假?

我在一个不同的文件上单独尝试了这个代码,它似乎工作.

Jon*_*eet 6

明显的情况:

  • 目标文件已存在
  • 目标目录不存在
  • 目标目录位于不同的文件系统上
  • 目标目录是只读的(或者至少,当前用户没有写访问权限)

希望那些至少可能会失败(JavaDoc明确表示很多这种行为都依赖于操作系统) - 你试过吗?