gpt4 book ai didi

java - 在 Java 中确定文件的年龄

转载 作者:行者123 更新时间:2023-12-01 21:50:52 28 4
gpt4 key购买 nike

我需要确定文件在 NTFS 文件系统上存在的时间。

我可以读取文件创建时间和系统时间(以毫秒为单位),但两者不相加。他们落后了很多年。 NTFS Epoc 是 1601 年 1 月 1 日 0000 小时 UTC,而 Java Epoc 是 1970 年 1 月 1 日。此外,NTFS 时间以 100 纳秒为单位。

考虑到所有这些,它仍然不合理。我哪里出错了?

public static final double secondsPerJulianYear = 316880878;
public static final double minutesPerJulianYear = 5281347.966666667;
public static final double secondsPerMinute = 60.0;
public static final double millisPerSecond = 1000.0;
public static final double yearsJavaTimeAhead = 369.0;

public static long ntfsFileCreationTime(final File file) {
FileTime fileCreationTime = null;
try {
Path filePath = Paths.get(file.toURI());
if (Files.exists(filePath)) {
BasicFileAttributes attributes = Files.readAttributes(filePath, BasicFileAttributes.class);
fileCreationTime = attributes.creationTime();
}
} catch (IOException ex) {
ex.printStackTrace();
}
return getJavaMillisFromNtfsTime(fileCreationTime.toMillis());
}

public static long getJavaMillisFromNtfsTime(final long ntfsTime) {
double ntfsNanos = ntfsTime * 100; // An NTFS time unit is equal to 100 nanoseconds
double ntfsMillis = (ntfsNanos / 10E6); // There are 10e6 nanoseconds in a millisecond
double millisJavaEpocAhead = yearsJavaTimeAhead * minutesPerJulianYear * secondsPerMinute * millisPerSecond;
return (long) (ntfsMillis - millisJavaEpocAhead);
}

According to Windows 7, the creation date is: 1/6/2016
This is the console output of one of the files:

System.currentTimeMillis(): 1454896412295
fileCreationTime(fileName): -116929029460761
file age: 118383925873056

最佳答案

来自 FileTime 的 Javadoc

public static FileTime fromMillis(long value)

Returns

a FileTime representing the given value in milliseconds.

Parameters:

value - thevalue, in milliseconds, since the epoch (1970-01-01T00:00:00Z); can benegative Returns: a FileTime representing the given value

请注意,纪元是相同的,时间以毫秒为单位。

所以你的方法应该是

public static long getJavaMillisFromNtfsTime(final long ntfsTime) {
return ntfsTime;
}

注意:当您遇到异常时,您不能继续并假装它没有发生。在你的情况下,你只会得到一个 NullPointerException 。我建议您要么不要捕获 IOException,要么返回一个明显无效的值,例如 Long.MIN_VALUE

关于java - 在 Java 中确定文件的年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35261497/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com