Сегодня я возился с методами 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());
Выходные данные:
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 не так много.