Can';t删除目录I'中的文件;你用Java重命名了吗?
今天我在玩弄java.io.File方法,偶然发现了一些奇怪的东西 当我重命名一个目录时,我似乎永远无法删除文件或新目录Can';t删除目录I'中的文件;你用Java重命名了吗?,java,file,file-rename,delete-file,Java,File,File Rename,Delete File,今天我在玩弄java.io.File方法,偶然发现了一些奇怪的东西 当我重命名一个目录时,我似乎永远无法删除文件或新目录 File dir = new File("dir"); dir.mkdir(); File file = new File(dir, "afile.txt"); file.createNewFile(); File newname = new File(dir, "newName.txt"); file.renameTo(n
File dir = new File("dir");
dir.mkdir();
File file = new File(dir, "afile.txt");
file.createNewFile();
File newname = new File(dir, "newName.txt");
file.renameTo(newname);
File newdir = new File("newdir");
dir.renameTo(newdir);
System.out.println("file exists? " + file.exists());
System.out.println("file deleted? " + file.delete());
System.out.println("newname exists? " + newname.exists());
System.out.println("deleted newname? " + newname.delete());
System.out.println("dir exists? " + dir.exists());
System.out.println("dir deleted? " + dir.delete());
System.out.println("newdir exists? " + newdir.exists());
System.out.println("deleted newdir? " + newdir.delete());
产生输出:
file exists? false
file deleted? false
newname exists? false
deleted newname? false
dir exists? false
dir deleted? false
newdir exists? true
deleted newdir? false
但是,在文件系统中,newdir和newname.txt仍然存在
但是,如果我注释掉目录的重命名,删除操作就可以了
在delete()和rename()之间是否有其他需要了解的规则?javadoc中没有太多内容。如果JVM没有关闭底层文件通道,您将无法从资源管理器中删除文件,因为它们仍将被标记为锁定。我认为输出没有任何问题:
file exists? false
file deleted? false
newname exists? false
deleted newname? false
dir exists? false
dir deleted? false
newdir exists? true
deleted newdir? false
newdir/
和newdir/newName.txt
。因此,输出的前六行应该是false
,它们是。(特别是,newname
变量仍然引用不再存在的dir/newname.txt
。)newdir
确实存在;您的输出证实了这一点总之,一切似乎都像人们期望的那样工作。正如Aix在其评论中所说:它试图删除
dir/newName.txt
,而这已经不存在了,因为您将其重命名为newdir/newName.txt
,为什么我不能删除newName.txt,尽管?@jonnyfive:因为它试图删除dir/newName.txt
,而该文件已不存在(您已将其重命名为newdir/newName.txt
)。关于java.io.File的实例,您需要记住两件事。1) 它们表示路径名而不是文件2)它们是不可变的。这就解释了你为什么要观察这种行为。