Java File.length()返回0
我正在尝试获取一些文件的长度(以字节为单位)。问题是它们的长度为零,而它们的长度不是零(我检查了!) 此外,我在这些文件上使用的每个其他文件的方法都很好。所以这只是长度的问题 为什么会这样 多谢各位Java File.length()返回0,java,file,content-length,Java,File,Content Length,我正在尝试获取一些文件的长度(以字节为单位)。问题是它们的长度为零,而它们的长度不是零(我检查了!) 此外,我在这些文件上使用的每个其他文件的方法都很好。所以这只是长度的问题 为什么会这样 多谢各位 //add all files names in the directory into array String[] files = new File(sourcedir).list(); filesNamesList.addAll(Arrays.asList(files))
//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声明,如果找不到文件,
length()
可能返回0L
此抽象路径名表示的文件的长度(以字节为单位),如果文件不存在,则为0L。某些操作系统可能会为表示系统相关实体(如设备或管道)的路径名返回0L。”
因此,如果您确定文件中包含内容,则可能无法正确找到它们。请仔细检查文件路径,然后重试
另外,如果您需要更详细的错误信息,javadoc建议使用;我在这里附和他们的观点。您的文件路径可能不正确。 Java声明,如果找不到文件,
length()
可能返回0L
由该抽象路径名表示的文件长度(字节),如果该文件不存在,则为0L。某些操作系统可能会为表示系统相关实体(如设备或管道)的路径名返回0L。”
因此,如果您确定文件中包含内容,则可能无法正确找到它们。请仔细检查文件路径,然后重试
另外,如果需要更详细的错误信息,javadoc建议使用;我在这里附和他们的观点。值得使用file.getAbsolutePath()检查文件的绝对路径,以确保函数是否具有正确的文件路径 值得使用file.getAbsolutePath()检查文件的绝对路径,以确保函数是否具有正确的文件路径 您正在使用的
list()
方法列出文件名,而不是它们的绝对路径
因此,您的代码将列出sourcedir
中的所有文件名(不是它们的完整路径),然后在运行程序的当前目录中查找这些相同的文件名。这就是为什么length()
如果您想要一个所有绝对路径的列表,那么可以使用如下流简洁地实现:
List<String> files = Arrays.stream(new File("C:\\users\\michael\\desktop").listFiles())
.map(f -> f.getAbsolutePath())
.collect(Collectors.toList());
List files=Arrays.stream(新文件(“C:\\users\\michael\\desktop”).listFiles())
.map(f->f.getAbsolutePath())
.collect(Collectors.toList());
但是,如果所有这些文件都只来自同一个目录,那么在for循环中使用新文件(sourcedir,name)
(这比在其他地方使用的新文件(sourcedir+PATH\u BACK\u SLASH+name)
更好),不是他们的绝对路线
因此,您的代码将列出sourcedir
中的所有文件名(不是它们的完整路径),然后在运行程序的当前目录中查找这些相同的文件名。这就是为什么length()
如果您想要一个所有绝对路径的列表,那么可以使用如下流简洁地实现:
List<String> files = Arrays.stream(new File("C:\\users\\michael\\desktop").listFiles())
.map(f -> f.getAbsolutePath())
.collect(Collectors.toList());
List files=Arrays.stream(新文件(“C:\\users\\michael\\desktop”).listFiles())
.map(f->f.getAbsolutePath())
.collect(Collectors.toList());
但是,如果所有这些文件都只来自同一个目录,那么在for循环中使用新文件(sourcedir,name)
(这比在其他地方使用的新文件(sourcedir+PATH\u BACK\u SLASH+name)
更好。)我认为这与您的问题无关,但是当从列表中删除目录时,请尝试使用构造函数文件(sourcedir,name)
输出是:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0?我认为这与您的问题无关,但是当从列表中删除目录时,请尝试使用构造函数文件(sourcedir,name)
输出是:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0?但它们都包含内容。我在它们所在目录的属性中看到它们的长度不是零:35.8KB、13.8KB等等。但它们都包含内容。我在它们所在目录的属性中看到它们的长度不是零:35.8KB、13.8KB等等。谢谢!我应该使用文件的绝对路径,而不仅仅是它们的名称。非常感谢。不客气。如果答案对你有用,请考虑投票。并且一定要点击复选标记,接受正确答案。谢谢!我应该使用文件的绝对路径,而不仅仅是它们的名称。非常感谢。不客气。如果答案对你有用,请考虑投票。并明确单击复选标记以接受它作为正确答案。