假设我有一个以这种方式获取的有效Java FileDescriptor:

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

现在请忘记我知道文件路径。我唯一拥有的是FileDescriptor。是否有一种简单方法来了解文件大小?
目前,我已经检查过:
  • FileDescriptor具有valid()方法,可以告诉我它是否有效
    但没有length()size()功能。
  • FileInputStream不返回路径,因为它是流,所以它
    显然不会告诉我文件大小。
  • File(http://docs.oracle.com/javase/7/docs/api/java/io/File.html)
    length()方法的没有构造函数可以处理
    FileDescriptor。

  • 我知道我可以阅读整个流并总结长度,但是我不认为它是简单的方式

    最佳答案

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

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

    但是,正如链接的问题所述,不能完全保证这将适用于所有操作系统。

    唯一确定且兼容的方式是读取流的内容,就像您在问题中所说的那样。

    08-16 02:35