您可以简单地访问系统上预先安排的文件路径。这是更可取的,因为添加到Web应用程序目录中的文件可能会丢失,或者根据系统配置可能无法解压缩Web应用程序。
在我们的服务器中,我们定义了一个在应用服务器 JVM 中设置的系统属性集,它指向我们应用程序的外部数据的“主目录”。当然,这需要修改应用服务器的配置(在启动时将-DAPP_HOME = ...添加到JVM_OPTS中),我们主要这样做是为了简化在应用服务器上下文之外运行的代码的测试。
您可以同样轻松地从Servlet配置中检索路径:
<web-app>
<context-param>
<param-name>MyAppHome</param-name>
<param-value>/usr/share/myapp</param-value>
</context-param>
...
</web-app>
然后检索此路径并将其用作基本路径以读取客户提供的文件。
public class MyAppConfig implements ServletContextListener {
// NOTE: static references are not a great idea, shown here for simplicity
static File appHome;
static File customerDataFile;
public void contextInitialized(ServletContextEvent e) {
appHome = new File(e.getServletContext().getInitParameter("MyAppHome"));
File customerDataFile = new File(appHome, "SuppliedFile.csv");
}
}
class DataProcessor {
public void processData() {
File dataFile = MyAppConfig.customerDataFile;
// ...
}
}
正如我所提到的,你可能会遇到的最大问题是安全限制。没有什么可以保证 Web 应用程序可以读取其 Web 应用程序根目录上方的任何文件。但通常可以使用简单的方法为特定路径授予特定 Web 应用程序的例外。
无论您需要访问此文件的代码是什么,由于您正在运行Web应用程序,因此您可以保证此文件将首先初始化,并且可以将其值存储在其他代码方便引用的地方,例如我的示例或更好的选择是将路径作为参数传递给需要它的代码。