Java I / O: установка метки времени - PullRequest
0 голосов
/ 15 ноября 2018

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

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

BasicFileAttributes предназначен для получения базовых атрибутов для многих файловых систем и не определяет методов модификации. Таким образом, чтобы изменить LastModifiedTime, вы должны использовать метод, который определен в классе Files.

К вашему сведению: Файлы

0 голосов
/ 15 ноября 2018

Вы правы, 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);`
0 голосов
/ 15 ноября 2018

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

  public static Path setLastModifiedTime(Path path, FileTime time)
        throws IOException
    {
        getFileAttributeView(path, BasicFileAttributeView.class)
            .setTimes(time, null, null);
        return path;
    }

Как вы можете видеть, он выбирает атрибут, используя getFileAttributeView (), а затем устанавливает для него время.

Этот метод простоудобный API, предоставляемый в классе Files.

...