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 在for循环中使用新文件调用时获取NullPointerException_Java_File_Loops_For Loop_Nullpointerexception - Fatal编程技术网

Java 在for循环中使用新文件调用时获取NullPointerException

Java 在for循环中使用新文件调用时获取NullPointerException,java,file,loops,for-loop,nullpointerexception,Java,File,Loops,For Loop,Nullpointerexception,我不太明白出了什么问题。这段代码以前可以工作,但在我移动了一些目录之后(尽管我已经将它们移回了以前的状态),现在代码突然拒绝编译,并将其称为NullPointerException(尽管我正在那里创建一个新对象) 猫是一根绳子。在当前存在的实例中,cat作为“cat1”传递,这是我的项目文件夹中的目录名 for(int i = 1; i <= new File(cat).listFiles().length; i++){ for(int i=1;i上面使用的代码可以在运行时抛出NPE(正

我不太明白出了什么问题。这段代码以前可以工作,但在我移动了一些目录之后(尽管我已经将它们移回了以前的状态),现在代码突然拒绝编译,并将其称为NullPointerException(尽管我正在那里创建一个新对象)

猫是一根绳子。在当前存在的实例中,cat作为“cat1”传递,这是我的项目文件夹中的目录名

for(int i = 1; i <= new File(cat).listFiles().length; i++){

for(int i=1;i上面使用的代码可以在运行时抛出NPE(正如@shmosel已经提到的),因为
listFiles()
可以在其实现中返回空值:

public File[] listFiles() {
    String[] ss = list();
    if (ss == null) return null;
    ...
}
它的javadoc也支持同样的功能


因此,如果目录路径(代码中的路径名
cat
)中没有任何文件/目录,那么
listFiles
调用将返回
null
,并且
.length
将抛出
NullPointerException

您忽略了
File.listFiles()
返回null。它是有文档记录的

for(int i = 1; i <= new File(cat).listFiles().length; i++){
或者更好地继续使用:

    for (File file : files)
        // do something with file

代码拒绝编译,称之为NullPointerException-NPE是一个运行时错误,而不是编译器错误。根据
listFiles()的javadocs,代码在哪里?堆栈跟踪在哪里
一个抽象路径名数组,表示此抽象路径名表示的目录中的文件和目录。如果目录为空,则该数组将为空。返回“null”如果此抽象路径名不表示目录,或者发生I/O错误。
可能
cat
的值不表示目录。这应该是一个好的开始。我只放这行代码,因为从错误消息到这一行代码的所有内容都指向这一行。我将尝试在堆栈跟踪中进行编辑。是吗一个常见的问题是,在for语句的终止条件下不断创建新对象,尽管这不是主要问题?@BenBoudreau为了更清晰,您必须共享异常的stacktrace。好的,这肯定意味着这需要做得更好。我这里的问题的基础是,它在之前和突然之间都工作正常y停止工作,但这本身可能是糟糕的编程实践。@BenBoudreau确实,您可能应该检查您正在使用的目录,然后尝试使用listFiles。谢谢您的提示。使用isDirectory表明它是“false”。需要弄清楚从这里到哪里。@BenBoudreau That表示
cat
不是一个目录,或者根本不存在,或者您没有对它的读取权限。解决了我的愚蠢问题(因为它们往往是)。是像我想的那样为cat传递“cat0”,而不是“cat1”,因为我错误地设置了不同的for循环。感谢所有帮助人员。
File[] files = new File(cat).listFiles();
if (files != null)
{
    for (int i = 1; i < files.length; i++)
        // do something with files[i]
}
    for (File file : files)
        // do something with file