import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributeView;
import java.nio.file.attribute.FileTime;
import java.time.Instant;
import java.time.temporal.ChronoUnit;

public class Main {

    public static void main(String[] args) throws IOException {
        Path path = Paths.get("</path/to/file/on/hfs/mount>");
        String fileStoreType = Files.getFileStore(path).type();
        System.out.println("File store type: " + fileStoreType);
        switch (fileStoreType) {
            case "apfs":
                System.out.println("Passes on apfs.");
                break;
            case "hfs":
                System.out.println("Fails on hfs.");
                break;
        }
        BasicFileAttributeView view = Files.getFileAttributeView(path, BasicFileAttributeView.class);
        FileTime time = FileTime.from(Instant.now().minusSeconds(1_000).truncatedTo(ChronoUnit.MINUTES));
        view.setTimes(null, time, null);
        FileTime result = view.readAttributes().lastAccessTime();
        if (!time.equals(result)) {
            throw new AssertionError(time + " != " + result);
        }
    }
}
