Просто используйте Path API, если можете.
Например, чтобы сохранить все атрибуты исходного файла в новом файле, используйте Files.copy(Path source, Path target, CopyOption... options)
:
try {
Path copiedFile =
Files.copy(Paths.get("D:\\test\\test.txt"), Paths.get("D:\\test.txt"),
StandardCopyOption.COPY_ATTRIBUTES);
}
catch (IOException e){
// handle that
}
В перечислении StandardCopyOption.COPY_ATTRIBUTES
указано:
Как минимум, время последнего изменения копируется в целевой файл, если это поддерживается как исходным, так и целевым хранилищем файлов.
Если вы хотите скопировать только последний измененный атрибут времени, это не сложнее, просто добавьте этот параметр после копирования и удалите аргумент CopyOption
, например:
Path originalFile = Paths.get("D:\\test.txt")
try {
Path copiedFile =
Files.copy(Paths.get("D:\\test\\test.txt"), originalFile);
Files.setLastModifiedTime(copiedFile,
Files.getLastModifiedTime(originalFile));
}
catch (IOException e){
// handle that
}
Наконец, обратите внимание, что путь и файл совместимы: Path.toFile()
возвращает соответствующий File
, а File.toPath()
возвращает соответствующий Path
.
Таким образом, даже если вы манипулируете File
в качестве входных данных, реализация все равно может использовать Path
API, не нарушая его.
person
davidxxx
schedule
16.02.2020
available()
, и в любом случае нет необходимости считывать весь файл в память. - person user207421   schedule 16.02.2020