【发布时间】:2016-09-06 10:44:06
【问题描述】:
在我的应用程序中,我使用以下方法读取文件,
public void readFIleData(String path) {
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(path));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println("Data : "+sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
我还使用以下方法获取文件的最后访问时间和最后修改时间,
public void getFIleInfo(String path) {
Path file = Paths.get(path);
try {
BasicFileAttributes attrs = Files.readAttributes(file, BasicFileAttributes.class);
FileTime accessTime = attrs.lastAccessTime();
System.out.println("accessTime : "+accessTime.toMillis());
FileTime modifiedTime = attrs.lastModifiedTime();
System.out.println("modifiedTime : "+modifiedTime.toMillis());
} catch (IOException e) {
e.printStackTrace();
}
}
我按以下顺序运行上述方法,
1-> getFIleInfo()
2-> readFIleData()
3-> getFIleInfo()
我得到以下输出,
accessTime : 1462943491685
modifiedTime : 1462943925846
Data : erteuyuittdgfdfghjkhw5643rtrr66664fdghf
accessTime : 1462943491685
modifiedTime : 1462943925846
这里是字符串格式的输出时间,
accessTime : 2016-05-11T05:11:31.685881Z
modifiedTime : 2016-05-11T07:39:28.237884Z
Data : erteuyuittdgfdfghjkhw5643rtrr66LE229F1HBQ664fdghf
accessTime : 2016-05-11T05:11:31.685881Z
modifiedTime : 2016-05-11T07:39:28.237884Z
我对此输出有疑问,因为访问时间与读取文件数据之前保持相同。有人可以向我解释一下java中的最后访问时间和最后修改时间的实际含义吗?
【问题讨论】:
-
This might be the reason。另一方面,您正在运行什么操作系统?这可能不是 Java 的错,而是操作系统没有正确更新它
-
Win8.1 64bit here,我可以复制相同的。很有趣。
-
Java 自己什么都不做:它只是向底层文件系统询问值。可以肯定的是,只需创建一个文本文件,使用操作系统或文件系统工具查看访问时间(类 Unix 上的
ls -atime,或 Windows 上的资源管理器),等待一两分钟,显示文件并再次查看访问时间。如果没有任何变化,则底层文件系统是有罪的。 -
另一种可能性是内存缓存。许多操作系统现在使用高速缓存存储经常访问的文件。如果你重新读取一个已经缓存的文件,就没有文件系统级别的访问,访问时间也没有理由改变。但这绝对不是Java问题。
-
很可能,因为 Window 10 是基于 NTFS 的,所以试试看changing the reg value in the article 是否能解决您的问题。但是,请注意,由于它是性能调整,因此已更改,因此将其关闭(设置为 0)可能会对性能产生影响