import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.BasicFileAttributeView;
import java.nio.file.attribute.FileTime;

public class SetCreationTime {
    public static void main(String[] args) throws Exception {
        Path file =
            Files.createTempFile(Path.of(System.getProperty("user.dir", ".")),
                "foo", "bar");
        Thread.currentThread().sleep(5000);

        try {
            BasicFileAttributeView view =
                Files.getFileAttributeView(file, BasicFileAttributeView.class); 
            BasicFileAttributes attrs = view.readAttributes();
            System.out.printf("Initial: %s %s %s%n", attrs.creationTime(),
                attrs.lastAccessTime(), attrs.lastModifiedTime());

            FileTime time = FileTime.fromMillis(System.currentTimeMillis()); 
            view.setTimes(time, time, time); 

            view = Files.getFileAttributeView(file, BasicFileAttributeView.class); 
            attrs = view.readAttributes();
            System.out.printf("Final: %s %s %s%n", attrs.creationTime(),
                attrs.lastAccessTime(), attrs.lastModifiedTime());

            if (!attrs.creationTime().equals(time)) {
                 String msg = String.format("%nActual: %s%nExpected: %s%n",
                     attrs.creationTime(), time);
                 throw new RuntimeException(msg);
            }
        } finally {
            Files.delete(file);
        }
    }
}
