将Jars所需的文本文件放在tomcat服务器上的位置?

时间:2011-03-13 19:42:04

标签: tomcat servlets jar

我有一个servlet,在WEB-INF / lib目录下我有一个jar文件。这个罐子是由我正在研究的项目制成的。项目中的代码执行正常,并在其主目录中使用txt文件。调用这些文件的Java代码不需要添加任何路径,IE:new FileReader(“file.txt”)。

问题是当我调用servlet时它不断抛出异常,它无法找到jar所需的那些txt文件。到目前为止,我已将txt文件放在以下位置,但没有运气:

  • 主目录
  • 源文件夹
  • Servlet Package
  • 的WebContent
  • WEB-INF
  • WEB-INF / lib中
  • META-INF

我想我已经用尽了txt文件可以去的所有可能的地方。 jar文件在哪里寻找它们?

谢谢

3 个答案:

答案 0 :(得分:1)

看看this post

当您将其作为项目执行时,它会起作用,因为该相对路径实际上对文件系统有效。但是,一旦将应用程序打包为JAR,读取文件的常用方法将失败,因为您的文件 in JAR,而文件系统只是另一个文件。要阅读JAR中打包的资源,您应该根据需要使用Class#getResource()Class#getResourceAsStream()

您还可以查看mindprod.com上的Java Glosarry对这些内容的评论:

答案 1 :(得分:0)

  

我想我已经用尽了txt文件可以去的所有可能的地方。 jar文件在哪里寻找它们?

不,你没有。将文件放在Tomcat分发中的/bin目录中。这个结构:

new FileReader("file.txt")

在进程当前目录中搜索文件。启动Tomcat后,它恰好是包含所有启动脚本的二进制目录(非常不幸的地方)。

那就是说,你应该考虑重写这个文件读取打开并使路径可配置,因为在大多数环境中读取(并且肯定写入)/bin目录应该是禁止的,这是一种非常糟糕的做法。

答案 2 :(得分:0)

我认为答案取决于Tomcat的启动方式,但默认目录通常是Tomcat根目录。

在servlet中尝试以下操作:

ServletContext context = getServletConfig().getServletContext ();
String fullPath = context.getRealPath ("file.txt");