无法删除我在Java中重命名的目录中的文件?

jon*_*ive 2 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(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());
Run Code Online (Sandbox Code Playgroud)

产量输出:

    file exists? false
    file deleted? false
    newname exists? false
    deleted newname? false
    dir exists? false
    dir deleted? false
    newdir exists? true
    deleted newdir? false
Run Code Online (Sandbox Code Playgroud)

但是在文件系统中,newdir和newname.txt都存在!

但是,如果我注释掉目录的重命名,则删除工作正常.

是否需要了解delete()和rename()之间的其他规则?javadoc并不多.

NPE*_*NPE 6

我没有看到输出有任何问题:

  1. 在重命名的结束,只是 newdir/newdir/newName.txt存在.因此,前六行输出应该是false,它们是.(特别是,newname变量仍然引用dir/newName.txt,不再存在.)

  2. newdir确实存在; 你的输出证实了这一点.

  3. 最后一个delete()不起作用,因为目录不为空.

总之,一切看起来都像人们期望的那样完美.

  • @jonnyfive:因为它试图删除`dir/newName.txt`,并且它不再存在(你已经将它重命名为`newdir/newName.txt`). (2认同)