java – 有没有办法让文件大小只有FileDescriptor?
作者:互联网
让我们假设我有一个有效的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()方法没有能够处理的构造函数
的FileDescriptor.
我知道我可以阅读整个流并总结长度,但我不认为它是简单的方法.
解决方法:
一种简单的方法是获取FileChannel(refer to this question)的大小:
public long getSize(FileDescriptor fd) throws IOException {
try (FileInputStream fis = new FileInputStream(fd)) {
return fis.getChannel().size();
}
}
但是,正如链接问题所述,没有强有力的保证这对所有操作系统都有效.
唯一确定且兼容的方法是阅读流的内容,就像您在问题中所说的那样.
标签:java,file,file-descriptor 来源: https://codeday.me/bug/20190829/1762118.html