5

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 依存スキームを持ちます。

4

2 に答える 2

9

Jimfs は Java 7 ファイル API を使用します。オブジェクトは常に既定のファイル システムに関連付けられているため、古いFileAPIと実際には混在しません。File使用しないでくださいFile

がある場合は、ほとんどの操作にクラスをPath使用する必要があります。java.nio.file.Filesこの場合、使用するだけです

Files.setLastModifiedTime(path, FileTime.fromMillis(millis));
于 2016-02-11T17:19:00.253 に答える