Java中的File.length()返回不正确的长度

时间:2014-11-19 12:08:34

标签: java file unix

我有一个二进制文件。当我运行ls -l时,它有12个字节。但是,当我尝试使用File.length查找文件的长度时,结果只有9.这是我的文件的十六进制表示(来自xxd -p):

2090887fffd0ffff437ffd0c 

这是代码

currentBytesRead = inputStream.read(buffer, bufferOffset, Math.min(1024, fileLength - bytesRead));

这是输入文件

  

https://www.dropbox.com/s/y508vsy8m2e8s9n/input.txt?dl=0

我正在使用Ubuntu 14.04 64位

2 个答案:

答案 0 :(得分:0)

来自Javadoc:

  

返回:

     

此抽象路径名表示的文件的长度(以字节为单位),如果该文件不存在,则为0L。某些操作系统可能返回0L表示路径名,表示依赖于系统的实体,例如设备或管道。

您确定文件路径是否正确?

答案 1 :(得分:0)

由于File.length()几乎只是调用操作系统,因此不应发生这种差异。有几个可能的原因(从最明显到更模糊):

  • 你实际上是在读同一个文件(打印绝对路径并在命令行中使用它)
  • 您确认该文件是“普通”文件吗?即不是设备节点/符号链接/...?
  • 您是否确认该文件不是稀疏文件(即报告的大小小于内容)?然而,实际发布的内容不太可能。
  • 是使用相同挂载点运行的JVM还是在chroot环境中运行?
相关问题