Попытка установить время последнего изменения файла в Java после его переименования. - PullRequest
5 голосов
/ 24 июля 2011

Вот код, с которого я начал:

long modifiedTime = [some time here];
File oldFile = new File("old_name.txt");
boolean renamed = oldFile.renameTo(new File("new_name.txt");
boolean timeChanged = oldFile.setLastModified(modifiedTime);

System.out.println("renamed: " + renamed);
System.out.println("time changed: " + timeChanged);

И вывод, который я увидел:

renamed: true
time changed: false

Но когда я попытался:

long modifiedTime = [some time here];
boolean renamed = new File("old_name.txt").renameTo(new File("new_name.txt"));
boolean timeChanged = new File("new_name.txt").setLastModified(modifiedTime);

System.out.println("renamed: " + renamed);
System.out.println("time changed: " + timeChanged);

Казалось бы, с этим выводом все работает нормально:

renamed: true
time changed: true

Почему второй подход работает, а первый - нет?

Ответы [ 3 ]

4 голосов
/ 24 июля 2011

В первом случае вы пытаетесь изменить последний измененный атрибут файла, который больше не существует!Потому что вы только что переименовали его.Во втором случае вы меняете атрибут существующего допустимого файла.

Это происходит потому, что файл Java класса является тонкой оболочкой над собственными командами.Если вы создали экземпляр old = new File("oldname"), затем вызвали rename, а затем вызвали некоторый метод для экземпляра old, он фактически выполняет системный вызов и отправляет как имя файла, так и команду.Но имя файла на данном этапе не имеет значения.

Надеюсь теперь понятно.

2 голосов
/ 24 июля 2011

oldFile.renameTo(new File("new_name.txt")); не меняется, где oldFile указывает.Путь oldFile по-прежнему old_name.txt после этого вызова.

Таким образом, вызов setLastModified не выполняется, поскольку old_name.txt больше не существует в этой точке.

1 голос
/ 24 июля 2011

File представляет путь к файлу или каталогу, который может существовать или не существовать.

Когда вы переименовываете файл, файл с исходным именем больше не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...