【问题标题】:File.list() in Java project works in Eclipse but not from terminal [duplicate]Java 项目中的 File.list() 在 Eclipse 中工作,但不能从终端 [重复]
【发布时间】:2016-03-19 05:43:36
【问题描述】:

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

谢谢。

【问题讨论】:

  • 你调试过应用程序吗??
  • 你能告诉我们,你是如何从终端启动的吗?
  • ReadFile.java:97 是哪一行?
  • @StephenC 它是一个java.io.ReadFile 人。 path 变量一定有问题。好的
  • @fge 那么我到底错在哪一部分?

标签: java linux terminal


【解决方案1】:

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

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

因为snull

File.list() 的 javadoc 说:

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

所以,我推测这是因为path 包含一个路径名1,它要么解析为文件(不是目录),要么解析为无法读取的目录,或者解析为任何内容全部。 (还有其他更模糊的可能性)


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

【讨论】:

  • 我终于找到了问题所在。为了获取当前目录,我使用了System.getProperty("user.dir")。愚蠢的错误是我从终端运行/src 目录中的项目。但是我的文件在项目的根目录下。将文件放在 src 文件夹中,它可以工作。
猜你喜欢
  • 2011-10-06
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
相关资源
最近更新 更多