java-文件lastModified与读取文件

Bat*_*tty 3 java file

我正在使用文件,修改文件时需要更新java中的值。所以,我想通过检查修改时间lastModifiedFile课,如需修改读取该文件,并更新从文件的一个属性。

我的疑问是,lastModified与从文件读取单个属性/读取整个文件一样重。因为我的测试结果显示几乎相同的结果。

因此,最好每次读取文件并从文件更新属性,或者从lastModified长远来看检查是更好的选择。

注意:此操作每隔一分钟执行一次。

还是有比轮询lastModified检查文件是否已更改更好的选项。我正在使用Java 6。

Kev*_*Day 5

因为您使用的是Java 6,所以唯一的选择就是检查修改后的日期或文件内容(还有另一个答案讨论使用较新的java.nio.file功能,如果可以选择使用Java 7,则应该,真的考虑一下)。

要回答您的原始问题:

您没有指定文件的位置(例如,它是在本地磁盘上还是在其他服务器上)-我会假设是本地磁盘,但如果文件位于其他计算机上,则网络延迟和netbios / dfs /您使用的任何网络文件系统都会加剧差异。

检查文件上的修改日期涉及从磁盘读取元数据。检查文件内容需要从磁盘读取文件内容(如果文件较小,则为一次读取操作;如果文件较大,则为多次读取操作)。

读取文件的内容可能涉及读/写锁定检查。一般而言,检查文件上的修改日期不需要进行读/写锁定检查(取决于文件系统,元数据磁盘页面上可能仍会出现一致性锁定,但通常比文件锁定的权重轻)。

如果文件经常更改(即您实际上希望每分钟更改一次),那么检查修改日期只是开销-在大多数情况下,您都将读取文件内容。如果文件不经常更改,那么修改日期检查(如果文件很大)肯定是有好处的(您必须阅读整个文件以获取信息)。

如果文件很小,并且不经常更改,则几乎可以避免。在大多数情况下,文件内容和文件元数据已经被分页到RAM中-因此,这两种操作都是对RAM中内容进行相对有效的检查。

我个人会进行修改的日期检查,只是从逻辑上讲是合理的(如果文件大小超过一个磁盘页面,它可以保护您免受性能下降的影响)-但是,如果文件频繁更改,那么我会读文件内容。但实际上,任何一种方法都可以。

这就引出了我们不请自来的建议:我的猜测是,在更大的方案中,此操作的性能并不重要。即使比现在花费了1000倍的时间,它也可能不会影响您应用程序的主要用途/性能。因此,我的真正建议是编写代码并继续前进-不要担心它的性能,除非这成为您应用程序的瓶颈。