文件大小缓存&在Java中有效检索文件大小

时间:2011-05-04 13:17:29

标签: java file filesize

我需要确定一个非常大的字符编码文件的大小。读取文件需要花费大量时间。

我的理解是,当首次创建/修改文件时,会缓存大小,因此操作系统可以在请求大小(例如文件管理器)时快速检索该值。 (例如,在win explorer中打开大文件的属性对话框时似乎很快)

假设上述情况属实,可以用Java检索吗?我原以为length()读取文件来确定大小......或者它实际上是否获得了这个缓存大小?或者,File对象的创建是否会读取/检索缓存的大小?

我自己的研究尚未能回答这些问题。

我很感激我的理解帮助

由于

4 个答案:

答案 0 :(得分:5)

getLength()委托底层本机操作系统函数获取文件的长度。你可以使用它。

答案 1 :(得分:5)

文件系统通常将长度存储为文件描述的一部分。这样OS就知道文件末尾的位置。访问时会缓存此信息。并且重复调用此信息也将被缓存。

注意:操作系统通常会从磁盘读取的数据超出您的要求。这是因为访问磁盘很昂贵而且内存相对便宜。例如当你获得一个文件的长度时,它可能会读取许多文件的详细信息,假设您可能也需要有关这些文件的信息。即,当您第一次获得文件信息时,它可能已经被缓存。

答案 2 :(得分:3)

length()方法不读取文件。它调用一个本机方法,该方法委托给OS来获取文件长度。其响应时间不应取决于实际文件长度。

答案 3 :(得分:2)

我认为你在想这个。长度应查询文件系统并快速计算出来。它肯定不会读取整个文件,并计算字节数。