当前位置: 首页 > 面试题库 >

当我尝试在驱动器中搜索时,程序抛出NullPointerException?

扈德容
2023-03-14
问题内容

我写了一个程序来查找文件或目录。
它正常工作时,我试图在搜索文件与目录
例如
java FileSearch abc.txt f:\xyz
但是当我尝试搜索文件从本地驱动器比计划抛出
异常
java FileSearch abc.txt f:\
后,显示所有的搜索结果将引发NullPointerException异常。

code is :

import java.io.*;
class FileSearch{
static String fd;
static boolean flg=true;
public static void main(String arr[]){
    fd=arr[0];
    String path=arr[1];
    String dir[]=new File(path).list();
    new FileSearch().finder(dir,path);
    if(flg){System.out.print("File not found.");}
}
public void finder(String[] dir,String path){
    for(int i=0;i<dir.length;i++){
        if(dir[i].equals(fd)){
            System.out.println(path+"\\"+fd);
            flg=false;
        }
        if(new File(path,dir[i]).isDirectory())
            finder(new File(path,dir[i]).list(),path+"\\"+dir[i]);
    }   
}
}

我想知道为什么会抛出此异常以及如何解决它。


问题答案:

list()

文档listFiles()提到,null如果
此抽象路径名不表示目录,或者发生I / O错误,它将返回
。此外,您需要检查 应用程序file.canRead()是否
可以读取目录。

IMHO

始终以这种方式使用它;

String[] files = file.list();
if (files!=null) {
    for (String f : files) processFile(f);
}

Recommend this;

File directory = new File(directoryName);

//get all the files from a directory
File[] fList = directory.listFiles();

if(fList != null){
    for (File file : fList){
        if (file.isFile()){
            System.out.println(file.getName());
        }
    }
}

如果您有任何疑问,请告诉我。



 类似资料: