Я читаю документацию Oracle и обнаружил что-то, что мне кажется ошибкой.
Возможно, кто-то сможет подтвердить или объяснить это лучше, чем документация.
Источник: https://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html
Код:
Path file = ...;
BasicFileAttributes attr =
Files.readAttributes(file, BasicFileAttributes.class);
long currentTime = System.currentTimeMillis();
FileTime ft = FileTime.fromMillis(currentTime);
Files.setLastModifiedTime(file, ft);
Разве setLastModifiedTime() не следует вызывать на attr вместо Files? (attr.setLastModifiedTime(file, ft))
Если нет, то зачем вообще нужен attr?




Внутренний код этого метода:
public static Path setLastModifiedTime(Path path, FileTime time)
throws IOException
{
getFileAttributeView(path, BasicFileAttributeView.class)
.setTimes(time, null, null);
return path;
}
Как вы можете видеть, он получает атрибут с помощью getFileAttributeView (), а затем устанавливает для него время.
Этот метод представляет собой просто удобный API, предоставляемый в классе Files.
BasicFileAttributes предназначен для получения основных атрибутов для многих файловых систем и не определяет никаких методов модификации. Итак, чтобы изменить LastModifiedTime, вы должны использовать метод, определенный в классе Files.
К вашему сведению: Файлы
Вы правы, attr не используется в этом конкретном фрагменте, это похоже на копирование одного и того же кода для разных фрагментов,
Поскольку контекст фрагментов - Basic File Attributes
До и после образца другие фрагменты используют attr, например:
System.out.println("size: " + attr.size()); System.out.println("isReadOnly is " + attr.isReadOnly());
Итак, в этом фрагменте вы можете удалить неиспользуемую строку назначения
BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);`
Большое спасибо! Я не был уверен, упустил ли я какой-то аспект того, как это работает.
Files- это класс, который читает атрибуты, поэтому он также должен быть тем, кто их записывает. Это просто удобный способ выполнять обычные файловые операции без взаимодействия с атрибутами.attr(и действительно его классBasicFileAttributes), похоже, не нужен в этом контексте, но может быть полезен, поскольку обеспечивает независимый от платформы способ группирования свойств файлов вместе.