Java - file.length()返回0

时间:2014-11-18 14:04:45

标签: java

出于某种原因,即使在执行了file.exists()检查之后,该值仍然为0,即使您确定这些目录不为空,因为我已经检查了c:\ included。

 File folder = new File(directama);
    File[] listOfFiles=folder.listFiles();

    for (File listOfFile : listOfFiles) {

    if(listOfFile.exists()){    

        String str = tamanhovari.getText();          //IRRELEVANT
        Long valisizeGB = parseLong(str);            //IRRELEVANT   
        String length = valueOf(listOfFile.length());//IRRELEVANT
        Long bytevalue = parseLong(length);          //IRRELEVANT    
        String gbdivisor ="10737418284";             //IRRELEVANT
        Long bytetogb = parseLong(gbdivisor);       //IRRELEVANT
        Long valisizeBT=valisizeGB*bytetogb;        //IRRELEVANT
        Long actualfilesize = bytevalue/bytetogb;   //IRRELEVANT

        if (listOfFile.length()<= valisizeBT) {
            if(listOfFile.isFile()){
            }
            else if (listOfFile.isDirectory()) {
                model.addRow(new Object[]{listOfFile.getName(),actualfilesize + " GB" });
            }
            else{}

    }}
    else{}
    }

它应该在逻辑上以GB的形式返回文件夹的值,但即使我删除GB格式化,并尝试仅返回字节值,它仍然只返回0.。

有什么建议吗?我几乎完成了所有事情。

编辑:解决了!感谢您的快速回复!要检索文件夹的大小,必须使用file.sizeOfDirectory()而不是file.length()

3 个答案:

答案 0 :(得分:3)

请阅读specs

The return value is unspecified if this pathname denotes a directory. 

答案 1 :(得分:0)

“长度”方法的Javadoc:

  

返回此抽象路径名表示的文件的长度。如果此路径名表示目录,则返回值未指定。

答案 2 :(得分:0)

您必须阅读文件的实际长度而不是目录。 根据{{​​3}}:

  

如果此路径名表示目录,则返回值未指定。

     

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