我有以下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.");
}
文件作为参数传递给方法,并且是这样获得的文件数组之一:
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;
}
});
为什么在第一个片段中成功为假?
我在另一个文件上单独尝试了这个代码,它似乎有效。
答案 0 :(得分:6)
明显的情况:
我期望那些至少可能会失败的(JavaDoc明确表示很多这种行为都依赖于操作系统) - 你试过吗?
答案 1 :(得分:3)
我发现了问题。这是因为我复制的目录不存在。
围绕这个if语句工作:
if (directoryToMoveTo.exists() || directoryToMoveTo.mkdir()){ }
答案 2 :(得分:1)
原版不存在? 已经是目标路径上的文件? Destinatination路径不存在? 源文件只读?
只是一些想法
答案 3 :(得分:1)
我能想到:
答案 4 :(得分:1)
即使您关闭文件,该文件仍可能仍处于打开状态:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6266377
答案 5 :(得分:0)
不要忘记您可能不被允许编写/更改/重命名文件 在Windows中几乎没有问题,但在Unix环境中很常见。
答案 6 :(得分:0)
要找到它无法正常工作的确切原因,您可以System.out.println
这些路径并尝试从操作系统级别移动它们。这将很好地说明为什么它不起作用。