我安装了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应用程序运行时,扫描程序只在文件中找到内容,而不是在服务器上?
答案 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,在属性中,我选择了当前的工作区。