2011-05-04 92 views
1

我需要确定一个非常大的字符编码文件的大小。读取文件需要很长时间。文件大小缓存和高效检索Java中的文件大小

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

假设上述条件为真,这可以在Java中检索吗?我曾经认为length()读取文件以确定大小......或者实际上是否获得了此缓存大小?或者是否创建一个File对象来读取/检索缓存大小?

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

我会很感激一些帮助,我的理解

感谢

+0

重复? http://stackoverflow.com/questions/116574/java-get-file-size-efficiently – laher 2011-05-04 13:21:59

+0

我在查询之前查看过这篇文章。我不相信它回答我的问题 – bashcrufter 2011-05-04 13:24:28

回答

5

文件系统通常将该长度存储为文件说明的一部分。这样操作系统知道文件的结尾在哪里。这些信息在访问时被缓存。并且反复调用这些信息也会被缓存。

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

2

我认为你是在想这。长度应该查询文件系统并快速计算出来。这当然不是读整个文件,而是计算字节数。

5

getLength()委托给底层本机操作系统函数来获取文件的长度。你应该没问题。

3

length()方法不读取文件。它调用一个本地方法来委托操作系统来获取文件长度。其响应时间不应取决于实际的文件长度。