Java项目中的File.list()在Eclipse中工作,但不在终端中工作

时间:2016-03-19 05:43:37

标签: java linux terminal

我正在从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]+"/");

感谢。

1 个答案:

答案 0 :(得分:2)

如果在显示的三行之一上发生异常,那么我怀疑此行发生了问题:

   System.out.println("Directory: "+path+s[0]+"/");

因为snull

File.list()的javadoc说:

  

如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。

所以,我猜测这种情况正在发生,因为path包含一个路径名 1 ,它可以解析为文件(不是目录),也可以解析为无法读取的目录,或者什么都没有。 (还有其他更隐蔽的可能性)

1 - 如果您错误地尝试使用URL,代码将尝试解析它,就像它是路径名一样。例如,“http://example.com/index.html”将引用名称为“http:”的目录中的某些内容,该内容极不可能存在。 (在大多数现代操作系统中,Colon是文件名中的合法字符......虽然显然不在Mac OSX上。)