Установите последнюю измененную временную метку файла, используя jimfs в Java
Как я могу установить дату последнего изменения файла с помощью jimfs? У меня есть что-то как это:
final FileSystem fileSystem = Jimfs.newFileSystem(Configuration.unix());
Path rootPath = Files.createDirectories(fileSystem.getPath("root/path/to/directory"));
Path filePath = rootPath.resolve("test1.pdf");
Path anotherFilePath = rootPath.resolve("test2.pdf");
После создания материала я создаю итератор каталога, например:
try (final DirectoryStream<Path> dirStream = Files.newDirectoryStream(rootPath, "*.pdf")) {
final Iterator<Path> pathIterator = dirStream.iterator();
}
После этого я перебираю файлы и читаю последний измененный файл, который затем возвращаю:
Path resolveLastModified(Iterator<Path> dirStreamIterator){
long lastModified = Long.MIN_VALUE;
File lastModifiedFile = null;
while (dirStreamIterator.hasNext()) {
File file = new File(dirStreamIterator.next().toString());
final long actualLastModified = file.lastModified();
if (actualLastModified > lastModified) {
lastModifiedFile = file;
lastModified = actualLastModified;
}
}
return lastModifiedFile.toPath();
}
Проблема состоит в том, что оба файла "test1.pdf" и "test2.pdf" имеют lastModified, равное "0", поэтому я на самом деле не могу проверить поведение, так как метод всегда возвращает первый файл в каталоге. Я пытался сделать:
File file = new File(filePath.toString());
file.setLastModified(1);
но метод возвращает false
,
UDPATE
Я только что увидел, что File#getLastModified() использует файловую систему по умолчанию. Это означает, что для считывания метки времени будет использоваться локальная файловая система по умолчанию. А это значит, что я не могу создать временный файл, используя Jimfs, прочитать последние измененные и затем утверждать пути этих файлов. Один будет иметь jimfs:// в качестве схемы uri, а другой будет иметь зависимую от ОС схему.
2 ответа
Jimfs использует файловый API Java 7. Это действительно не смешивается со старым File
API, а File
объекты всегда привязаны к файловой системе по умолчанию. Так что не используйте File
,
Если у тебя есть Path
, вы должны использовать java.nio.file.Files
класс для большинства операций над ним. В этом случае вам просто нужно использовать
Files.setLastModifiedTime(path, FileTime.fromMillis(millis));
Я новичок в этом, но вот моя точка зрения, если вы выберете 1 конкретную ПАПКУ и хотите извлечь из нее последний файл.
public static void main(String args[]) {
//choose a FOLDER
File folderX = new File("/home/andy/Downloads");
//extract all de files from that FOLDER
File[] all_files_from_folderX = folderX.listFiles();
System.out.println("all_files_from_folderXDirectories = " +
Arrays.toString(all_files_from_folderX));
//we gonna need a new file
File a_simple_new_file = new File("");
// set to 0L (1JAN1970)
a_simple_new_file.setLastModified(0L);
//check 1 by 1 if is bigger or no
for (File temp : all_files_from_folderX) {
if (temp.lastModified() > a_simple_new_file.lastModified()) {
a_simple_new_file = temp;
}
//at the end the newest will be printed
System.out.println("a_simple_new_file = "+a_simple_new_file.getPath());
}
}}