有没有办法让文件大小只有FileDescriptor?

时间:2015-11-11 11:00:17

标签: java file file-descriptor

假设我有一个有效的Java FileDescriptor,我就是这样:

FileInputStream is = new FileInputStream("/some/path/to/file.txt");
FileDescriptor fd = is.getFD();

现在请忘记我知道文件路径。我唯一拥有的是FileDescriptor。是否有简单方法来了解文件大小? 现在我已经检查过了:

  1. FileDescriptorvalid()方法可以告诉我它是否有效 但没有length()size()功能。
  2. FileInputStream不会返回路径,因为它是一个流 显然不会告诉我文件大小。
  3. Filehttp://docs.oracle.com/javase/7/docs/api/java/io/File.html) 其中length()方法没有能够处理的构造函数 的FileDescriptor。
  4. 我知道我可以阅读整个流并总结长度,但我不认为它是简单的方式

1 个答案:

答案 0 :(得分:5)

一种简单的方法是获取FileChannelrefer to this question)的大小:

public long getSize(FileDescriptor fd) throws IOException {
    try (FileInputStream fis = new FileInputStream(fd)) {
        return fis.getChannel().size();
    }
}

然而,正如链接问题所说,没有强有力的保证,这将适用于所有操作系统。

唯一可靠且兼容的方法是阅读流的内容,就像您在问题中所说的那样。