作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有一个有效的 Java FileDescriptor
,它是通过这种方式获得的:
FileInputStream is = new FileInputStream("/some/path/to/file.txt");
FileDescriptor fd = is.getFD();
现在请忘记我知道文件路径。我唯一拥有的是 FileDescriptor
。有没有一种简单的方法可以知道文件的大小?现在我已经检查过:
FileDescriptor
有 valid()
方法可以告诉我它是否有效但没有 length()
或 size()
功能。FileInputStream
不返回路径,因为它是一个流显然不会告诉我文件大小。文件
( 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/
我是一名优秀的程序员,十分优秀!