问题描述
这是一个在文件夹下搜索给定文件,并且返回路径的代码,工程一部分:publicstaticStringSearchFile(Stringdirectory,Stringfilename){FileabsolutePath=newFile(directory);if(!absolutePath.exists()){System.out.println("找不到指定的路径,请重新指定!");returnnull;}else{if(absolutePath.isDirectory()){File[]filelist=absolutePath.listFiles();for(Filef:filelist){Stringresult=SearchFile(f.toString(),filename);if(result!=null)returnresult;}returnnull;}else{if(filename.equals(absolutePath.getName()))returnabsolutePath.getPath();else{returnnull;}}}}算法使用了递归。。。。但我在测试时有的时候情况很顺利(比如在F盘),有的时候(换了其他盘之后)在红字处会出现NullPointerException。。。。。十分诡异。。。求达人指点~
解决方案
解决方案二:
listFiles()方法返回null:publicFile[]listFiles(){String[]ss=list();if(ss==null)returnnull;intn=ss.length;File[]fs=newFile[n];for(inti=0;i<n;i++){fs[i]=newFile(ss[i],this);}returnfs;}调用的list():publicString[]list(){SecurityManagersecurity=System.getSecurityManager();if(security!=null){security.checkRead(path);}returnfs.list(this);}
解决方案三:
看看jdk里面关于ListFile返回值的说明:Returns:Anarrayofabstractpathnamesdenotingthefilesanddirectoriesinthedirectorydenotedbythisabstractpathname.Thearraywillbeemptyifthedirectoryisempty.Returnsnullifthisabstractpathnamedoesnotdenoteadirectory,orifanI/Oerroroccurs.有两种情况可以回返回null1)父路径不是文件夹。2)出现IO错误。从你的代码来看,你的程序是由于IO错误导致的。你看看磁盘的权限、或指定的文件夹是否被别的进程锁死了,可以把出错的文件路径输出来看看.