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

use*_*095 3 java file file-descriptor

我们假设我有一个有效的Java FileDescriptor,我用这种方式:

FileInputStream is = new FileInputStream("/some/path/to/file.txt");
FileDescriptor fd = is.getFD();
Run Code Online (Sandbox Code Playgroud)

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

  1. FileDescriptorvalid()方法可以告诉我它是否有效但没有length()size()功能.
  2. FileInputStream 不返回路径,因为它是一个流,它显然不会告诉我文件大小.
  3. File(http://docs.oracle.com/javase/7/docs/api/java/io/File.html)其中有length()方法没有能够处理FileDescriptor的构造函数.

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

Tun*_*aki 5

一个简单的方法是获得FileChannel(参考这个问题)的大小:

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

但是,正如链接问题所述,没有强有力的保证这对所有操作系统都有效.

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

  • @ user1723095`File`表示可能指向或不指向现有文件的单个路径.`FileDescriptor`始终指向现有文件,但该文件可能存在于多个路径下. (2认同)