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

标签 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. 文件 ( http://docs.oracle.com/javase/7/docs/api/java/io/File.html ) 它有 length() 方法没有能够处理的构造函数 文件描述符。

我知道我可以读取整个流并对长度求和,但我不认为这是简单的方法

最佳答案

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

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

但是,如链接问题所述,并不能有力保证这适用于所有操作系统。

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

关于java - 有没有办法让只有 FileDescriptor 的文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33649134/

相关文章:

java - 无法解析 Fragment 类中的方法 registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter)

java - 如何在java中为属性文件提供文件锁?

java - 为什么父类(super class)调用子类的重写方法?

Java - 在 .jar 中使用 .txt 文件时出错

python - 在python中将文件对象作为字符串读取

linux - 我可以修改特定进程的标准输入描述符吗?

java - 用于启用 HPKP 的 Tomcat 过滤器

performance - C++ : Best text accumulator

bash - 在 bash 脚本中间切换输出文件重定向

c - 如何管理进程二叉树中向上的管道和向下的管道?