在linux上,使用File.length() 有时会返回0, 但文件实际有内容。求各位大哥大姐帮忙.

football 2005-03-16 04:19:38
在linux上,使用File.length() 有时会返回0, 但文件实际有内容。求各位大哥大姐帮忙.

//test.java
import java.io.*;
public class test
{
public static void main(String args[])
{
File file = new File("/proc/mdstat");
System.out.println("file.length(): " + file.length());
}
}
...全文
895 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dany906 2005-04-29
  • 打赏
  • 举报
回复
虽然楼上的可能都没有见过这些现象,但是有些回答确实有点弱智的:比如楼主明明说了是文件而不是文件夹,为什么还是有人说要查一下是不是文件夹呢?还有一些更加可笑的我就不说了,很上自尊的。虽然我也遇到这样的问题,一样不知道怎样解决,但是我至少不会象楼上那样胡乱猜。不过楼主也要体谅一下,这毕竟是免费论坛。没有人有义务回答你的问题。你最好多点google一下吧。

另外对于你这个问题,其中 可能的一个错误原因就是,这个文件还被其他程序引用。你看一下有没有在调用length()方法之前有任何语句在引用该文件,比如FileOutPutStream(file),如果有,设法释放。或者在引用之前调用length()。
祝你成功吧
football 2005-03-18
  • 打赏
  • 举报
回复
对楼上各位的好意我心领了。

不过我觉的程序员应该严谨一点,你们上面所说,根本就解决不了我的问题。

靠猜测给别人帮助,感觉你们太不尊重其他程序员了。

football 2005-03-16
  • 打赏
  • 举报
回复
楼上的,我用vi可以打开文件,我想问一下, 就算我以只读的形式(实际情况是我没有发现在File类中如何以只读方式打开文件)打开文件,文件长度也不应该返回0啊.

to fuwang(岳麓晚枫) :
你说的情况我去试一下,先谢了。
zcx2001 2005-03-16
  • 打赏
  • 举报
回复
你好像没有注意到一个问题,这个文件已经被Linux系统打开了,估计是独占了,你只能用读的方式打开它!:)
fuwang 2005-03-16
  • 打赏
  • 举报
回复
楼上的各位都没去上机试,其实问题是:你写的是绝对路径,而不是当前路径。
你把File file = new File("/proc/mdstat")改为
File file = new File("proc/mdstat")试试。
另外,看看mdstat是文件还是目录,如果是目录,返回的还是0

football 2005-03-16
  • 打赏
  • 举报
回复
我在把条件说一下,
1.文件存在,是文件,不是目录。
2.文件里面有内容,超过30个字节.
3.登陆用户对文件有读的权限。
4.文件的路径==file.getAbsolutePath()获取的路径。


感谢各位的建议。

希望各位能把代码放到linux上运行一下.




zhigangsun 2005-03-16
  • 打赏
  • 举报
回复
你可以先用isFile或者isDirectory进行判断以下,然后再获取文件大小。
fogs 2005-03-16
  • 打赏
  • 举报
回复
呵呵,有可能当成文件夹,不然文件可能就是空的呢?
fogs 2005-03-16
  • 打赏
  • 举报
回复
是否文件一上来就是一个文件结束标识的二进制数字呢?或者尝试读里面的数据,看看能不能读啊?
jFresH_MaN 2005-03-16
  • 打赏
  • 举报
回复
除非是文件夹。不然应该不会出现你这个问题的
football 2005-03-16
  • 打赏
  • 举报
回复
我确定路径也是正确的。
希望在linux做开发的高手给点指导.文件在linux上应该存在的。

thank you very much.
myth822 2005-03-16
  • 打赏
  • 举报
回复
检查你的文件路径是否正确,file.getAbsolutePath();
football 2005-03-16
  • 打赏
  • 举报
回复
我现在确保文件是存在的,
另外,文件是可读的,
我用了canRead(), isFile()都返回true.

to Jacky1206(还价门外有条河):
生成新文件用createNewFile()
kingfish 2005-03-16
  • 打赏
  • 举报
回复
文件不存在(或空)返回0

返回0时,检查文件是否存在
Jacky1206 2005-03-16
  • 打赏
  • 举报
回复
File file = new File("/proc/mdstat");
这句好像是新生成一个文件吧,新文件内容应该为空吧.此时length()得到的值是0正常啊感觉

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧