我在 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/