我正在尝试获取某些文件的长度(以字节为单位)。问题是我的长度为零,而长度不为零(我检查过!)
此外,我在这些文件上使用的每个其他文件的方法都可以正常工作。所以这只是长度的问题。
为什么会这样?
谢谢。
//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());
}
}
答案 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