java - 使用 Java : where to store and how reference datasets? 的 Eclipse 动态 Web 项目

标签 java eclipse tomcat resources

我在 eclipse 中开发一个 Web 项目,后端有一个 servlet(使用 tomcat 8)。在 servlet 中,我想引用两个包含应读取数据的大文件。直到现在我只是使用硬编码文件路径作为字符串来引用文件,例如像这样:"C:\\data\\file1"

我想将文件存储在项目中,这样无论我在哪台计算机上运行应用程序,它们的相对路径都保持不变。

这个主题有时会在这里出现,我尝试过类似的东西

System.getProperty("catalina.base");

System.getProperty("user.dir");

但这两种方法都指向与我的文件存储位置完全不同的位置。

所以如果文件像这样存储在项目中:

"server\\webapps\\project\\data\\file1"

并且 servlet 与其他 .java 文件一起包含在包文件夹中,我怎样才能以字符串形式获取 file1 的路径?

最佳答案

如果该文件是 webapp 的一部分,则不得将其视为文件系统上的文件。 Java EE webapp 被部署为一个 war 文件,它基本上是一个 zip 文件。有些服务器将这个 war 文件提取到磁盘,有些则没有,但您无需关心,因为 Java API 提供了读取应用程序中嵌入的资源所需的一切。

如果是,在已部署的存档中,在 WEB-INF/classes 中,那么它是必须使用类加载器加载的应用程序类路径的一部分:

InputStream in = MyServlet.class.getResourceAsStream("/com/foo/bar/file.txt");

其中 com.foo.bar 是文件所在的包。对于最终位于存档中该位置的文件,您可以将其与 Java 源文件一起放在 com.foo.bar 包中。 Eclipse 将通过简单地复制该文件来“编译”它。

如果它在存档的其他地方,例如在 /WEB-INF/file.txt 中,那么您应该使用

InputStream in = servletContext.getResourceAsStream("/WEB-INF/file.txt");

要在存档内的 /WEB-INF/ 中结束,在典型的 eclipse 项目中,文件应该位于 WebContent/WEB-INF 中。

关于java - 使用 Java : where to store and how reference datasets? 的 Eclipse 动态 Web 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34616994/

相关文章:

java - 如何在 Struts 2 中使用 jQuery Ajax 检查唯一用户?

java - 匹配正则表达式但仅替换第一部分 - Java

java - 找不到简单 Jersey Hello World 404 资源

spring - 如何在 Tomcat 7 上部署 Grails 3 应用程序?

java - 拦截查询字符串

java - 如何在Rhino中检查一个对象是否是JavaScript对象

java - 端口 8005 Tomcat 需要,已被占用

c++ - Eclipse CDT 从 Makefile 项目中获取路径?

java - 导入 Java 项目以在 Java 动态 Web 项目中使用

mysql - 停止/重新部署时 Tomcat 7+ 内存泄漏。 Spring Data、JPA、Hibernate、MySQL