我正在从Java中的不同文件夹中获取一些文件,如下所示:
File d=new File(path); // Path here is surely not null
String s[]=d.list();
System.out.println("Directory: "+path+s[0]+"/");
上面的代码在Eclipse中运行,我的操作系统是Ubuntu 14.04。当我从终端编译并运行项目时,我收到以下错误:
Exception in thread "main" java.lang.NullPointerException
at io.ReadFile.read2Dir(ReadFile.java:97)
at io.ReadFile.readDir(ReadFile.java:134)
at gui.Run.readFile(Run.java:35)
at gui.Run.main(Run.java:304)
即使s [0]对应一个文件夹,我终端也会得到NullPointerException。
这是我从终端编译的方式:
javac -sourcepath src -cp /home/myUsername/workspace/tezoz_my/ -encoding ISO-8859-1 src/gui/Run.java
顺便说一下,我不得不改变编码,因为项目是用ISO 8859-1创建的。
然后我运行项目:
java gui.Run
这是发生错误的地方:
System.out.println("Directory: "+path+s[0]+"/");
感谢。
答案 0 :(得分:2)
如果在显示的三行之一上发生异常,那么我怀疑此行发生了问题:
System.out.println("Directory: "+path+s[0]+"/");
因为s
是null
。
File.list()
的javadoc说:
如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。
所以,我猜测这种情况正在发生,因为path
包含一个路径名 1 ,它可以解析为文件(不是目录),也可以解析为无法读取的目录,或者什么都没有。 (还有其他更隐蔽的可能性)
1 - 如果您错误地尝试使用URL,代码将尝试解析它,就像它是路径名一样。例如,“http://example.com/index.html”将引用名称为“http:”的目录中的某些内容,该内容极不可能存在。 (在大多数现代操作系统中,Colon是文件名中的合法字符......虽然显然不在Mac OSX上。)