在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());
}
}

解决方案 »

  1.   

    File file = new File("/proc/mdstat");
    这句好像是新生成一个文件吧,新文件内容应该为空吧.此时length()得到的值是0正常啊感觉
      

  2.   

    我现在确保文件是存在的,
    另外,文件是可读的,
    我用了canRead(), isFile()都返回true.to Jacky1206(还价门外有条河):
    生成新文件用createNewFile()
      

  3.   

    检查你的文件路径是否正确,file.getAbsolutePath();
      

  4.   

    我确定路径也是正确的。
    希望在linux做开发的高手给点指导.文件在linux上应该存在的。thank you very much.
      

  5.   

    你可以先用isFile或者isDirectory进行判断以下,然后再获取文件大小。
      

  6.   

    我在把条件说一下,
    1.文件存在,是文件,不是目录。
    2.文件里面有内容,超过30个字节.
    3.登陆用户对文件有读的权限。
    4.文件的路径==file.getAbsolutePath()获取的路径。
    感谢各位的建议。希望各位能把代码放到linux上运行一下. 
      

  7.   

    楼上的各位都没去上机试,其实问题是:你写的是绝对路径,而不是当前路径。
    你把File file = new File("/proc/mdstat")改为
    File file = new File("proc/mdstat")试试。
    另外,看看mdstat是文件还是目录,如果是目录,返回的还是0
      

  8.   

    你好像没有注意到一个问题,这个文件已经被Linux系统打开了,估计是独占了,你只能用读的方式打开它!:)
      

  9.   

    楼上的,我用vi可以打开文件,我想问一下, 就算我以只读的形式(实际情况是我没有发现在File类中如何以只读方式打开文件)打开文件,文件长度也不应该返回0啊.to  fuwang(岳麓晚枫) :
     你说的情况我去试一下,先谢了。
      

  10.   

    虽然楼上的可能都没有见过这些现象,但是有些回答确实有点弱智的:比如楼主明明说了是文件而不是文件夹,为什么还是有人说要查一下是不是文件夹呢?还有一些更加可笑的我就不说了,很上自尊的。虽然我也遇到这样的问题,一样不知道怎样解决,但是我至少不会象楼上那样胡乱猜。不过楼主也要体谅一下,这毕竟是免费论坛。没有人有义务回答你的问题。你最好多点google一下吧。
      
    另外对于你这个问题,其中 可能的一个错误原因就是,这个文件还被其他程序引用。你看一下有没有在调用length()方法之前有任何语句在引用该文件,比如FileOutPutStream(file),如果有,设法释放。或者在引用之前调用length()。
    祝你成功吧