jimfs を使用してファイルの最終更新日を設定するにはどうすればよいですか? 私はsmthを持っています。このような:
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 を使用して一時ファイルを作成し、最後に変更されたファイルを読み取り、それらのファイルのパスをアサートできないことを意味します。1 つは uri スキームとして jimfs:// を持ち、もう 1 つは OS 依存スキームを持ちます。