Ввод-вывод Java: установка отметки времени

Я читаю документацию 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?

Files - это класс, который читает атрибуты, поэтому он также должен быть тем, кто их записывает. Это просто удобный способ выполнять обычные файловые операции без взаимодействия с атрибутами. attr (и действительно его класс BasicFileAttributes), похоже, не нужен в этом контексте, но может быть полезен, поскольку обеспечивает независимый от платформы способ группирования свойств файлов вместе.
Paul Benn 15.11.2018 11:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
54
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Внутренний код этого метода:

  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);`

Большое спасибо! Я не был уверен, упустил ли я какой-то аспект того, как это работает.

Markus Fransson 15.11.2018 12:14

Другие вопросы по теме