Eclipse,Tomcat和MacOS X:user.dir不正确

时间:2014-07-25 14:34:48

标签: java eclipse tomcat

我安装了tomcat,我正在使用Eclipse Luna Java EE。问题是我的一个类读取了一个文本文件。当我作为Java应用程序执行它时,它正确读取文件。当我在服务器上执行它时("在服务器上运行"),然后它会因nullpointexception崩溃。

我检查了它正在读取文件的路径。当它在服务器上执行时,它会尝试从" Eclipse.app/Contents/MacOS /"中读取文件。只是为了它,我试图将文本文件放在那里,并没有说它不再找到它,但每当我尝试使用Scanner读取它时,它产生了这个:

  

java.util.Scanner [delimiters = \ p {javaWhitespace} +] [position = 0] [match valid = false] [need input = false] [source closed = false] [skipped = false] [group separator = 。] [decimal separator = \,] [positive prefix =] [negative prefix = \ Q- \ E] [positive suffix =] [negative suffix =] [NaN string = \ Q?\ E] [infinity string = \ Q ?\ E]

并且永远不会超过一行(hasNext始终为false)。

所以,我的问题是:

1 - 如何让它在其他地方查找.txt文件(例如,在项目的根目录下)?

2 - 为什么在将类作为Java应用程序运行时,扫描程序只在文件中找到内容,而不是在服务器上?

2 个答案:

答案 0 :(得分:3)

如果您将该应用作为 web 应用运行,那么您应该寻找:

  • 绝对路径
  • 资源(例如,在类路径上)
  • 上下文相对路径

绝对路径很简单,可以使用init参数,系统属性,配置文件等进行定义。

类路径资源必须存在于应用程序的类路径中。

相对资源不在ServletContext

使用文件的功能应该可用,无论文件来自何处,例如,它应该采用流或其他内容。这样,可以从您的Web应用程序,诸如static main之类的独立类或单元测试中使用该功能。

答案 1 :(得分:1)

对那些遇到同样问题的人:

我正在打印Scanner对象,这就是我收到该文本的原因。 据了解,Scanner仍然没有阅读该文件,我在其他地方读到这往往是一个编码问题。

不知何故,只有当我通知我正在阅读的文件的编码时,Scanner才能正常工作。所以

Scanner f=new Scanner (fileobject, "UTF-8"); 

为我工作。

从user.dir开始,我在Eclipse上更改了Apache tomcat的属性,选择"运行配置",选择Apache,在属性中,我选择了当前的工作区。