Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java File.length()返回0_Java_File_Content Length - Fatal编程技术网

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等等。谢谢!我应该使用文件的绝对路径,而不仅仅是它们的名称。非常感谢。不客气。如果答案对你有用,请考虑投票。并且一定要点击复选标记,接受正确答案。谢谢!我应该使用文件的绝对路径,而不仅仅是它们的名称。非常感谢。不客气。如果答案对你有用,请考虑投票。并明确单击复选标记以接受它作为正确答案。