File.length()返回0

时间:2019-06-18 09:44:34

标签: java file content-length

我正在尝试获取某些文件的长度(以字节为单位)。问题是我的长度为零,而长度不为零(我检查过!)

此外,我在这些文件上使用的每个其他文件的方法都可以正常工作。所以这只是长度的问题。

为什么会这样?

谢谢。

    //add all files names in the directory into array
    String[] files = new File(sourcedir).list();
    filesNamesList.addAll(Arrays.asList(files));
    filesNamesList.removeIf(name -> ((new File(sourcedir + PATH_BACK_SLASH + name))
            .isDirectory()));

    for (String f:files){
        File e =  new File(f);
        System.out.println((e).length());

    }
}

4 个答案:

答案 0 :(得分:0)

您的文件路径可能不正确。

Java的File.length() Javadoc指出length()如果找不到该文件,则可能返回0L。

  

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

因此,如果您确定文件中包含内容,则可能找不到正确的文件。仔细检查文件路径,然后重试。

此外,如果您需要更详细的错误信息,则Javadoc建议使用Files.readAttributes()。我在这里回应他们的观点。

答案 1 :(得分:0)

值得使用 File.getAbsolutePath()检查文件的绝对路径,以确保是否为函数指定了正确的文件路径。

答案 2 :(得分:0)

您使用的list()方法列出文件名称,而不是其绝对路径

因此,您的代码列出了sourcedir中的所有文件名(而不是它们的完整路径),然后在运行程序的当前目录中查找那些相同的文件名。为什么length()对所有这些文件都返回0(as per the docs,如果文件不存在,它将返回0。)

如果您想获取所有绝对路径的列表,则可以使用如下流简明地做到这一点:

List<String> files = Arrays.stream(new File("C:\\users\\michael\\desktop").listFiles())
        .map(f -> f.getAbsolutePath())
        .collect(Collectors.toList());

但是,如果所有这些文件仅来自同一目录,请在for循环中使用new File(sourcedir, name)(这比在其他地方使用的new File(sourcedir + PATH_BACK_SLASH + name)更好。)< / p>

答案 3 :(得分:-1)

问题在于这些文件中不包含任何内容。所以输出为0