我运行了Tomcat服务器。并且可以在Web界面中上传jar文件。现在服务器能够调用上传的jar文件的方法。问题是,我在jar文件中找到了一些文件的相对路径。如果我在本地运行我的jar文件,这没问题,但在服务器上路径不再适合。
上传jar文件的地方是:
arg0.getServletContext().getRealPath(File.separator) + "WEB-INF" + File.separatorChar + "lib" + File.separatorChar;
从我的jar文件中我没有获取Servlet Context的选项,因为它是jar文件中的一个封闭环境。
任何想法如何访问文件?
坦克
答案 0 :(得分:0)
您不应将Java应用程序存档(JAR,WAR,EAR,whatevAR)中的资源视为磁盘文件系统资源。您应该将它们视为类路径资源。
简单地说,这是错误的,因为它取决于当前的工作目录"当JVM启动时,您无法从Java应用程序内部控制它:
InputStream resource = new FileInputStream("file.ext"); // Relative to CWD.
其中一个是正确的,取决于您是否希望允许用户通过在具有更高类加载优先级的地方将JAR外部的完全相同的FQN放置在JAR捆绑资源上来覆盖JAR捆绑资源:
InputStream resource = getClass().getResourceAsStream("file.ext"); // Relative to class' package.
InputStream resource = Thread.currentThread().getContextClassLoader().getResourceAsStream("file.ext"); // Relative to classpath root.