JavaEE - WAR - 已部署::如何从资源目录中读取文件

Jee*_*eef 5 java glassfish war java-ee maven

我认为应该这样做的"正确"方式是,getResourceAsStream()但它似乎并没有削减它.

我的情况:

我有一个Java的Web应用程序,最终将部署到几个不同的Web服务器,可能是GlassFish,TomcatWildFly.目前我正在使用Netbeans处理Mac,我可以访问WildFlyGlassFish.该项目已经成熟

我需要做的是读取和写入两个不同的Excel文件.一个用作"模板",一个用作输出文件.该应用程序以前独立运行,我试图将其包装到JSF网站.

我需要FileInputStream为我的其中一个方法获取一个并最终创建一个输出文件,该文件将通过http提供给用户.

根据我的收集,适当的方式来做到这一点应该是:

XLSX文件

/src/main/resources/ANALYSIS_template.xlsx
Run Code Online (Sandbox Code Playgroud)

位置一旦编译成WAR文件:: WildFly

/usr/local/opt/wildfly-as/libexec/standalone/deployments/fleetForecast-1.0-SNAPSHOT.war/WEB-INF/classes/ANALYSIS_template.xlsx
Run Code Online (Sandbox Code Playgroud)

位置一旦编译成WAR文件:: GlassFish

~/devel/fleetforecast/target/fleetForecast-1.0-SNAPSHOT/WEB-INF/classes/ANALYSIS_template.xlsx
Run Code Online (Sandbox Code Playgroud)

Java代码

我想我可能设法使用以下命令获取文件的输入流:

InputStream is1 = getClass().getResourceAsStream("ANALYSIS_template.xlsx");
Run Code Online (Sandbox Code Playgroud)

我也尝试过("/ANALYSIS_template.xlsx")类似行为的方式.当我尝试从此输入流中读取时

try {
        is1.read();
    } catch (IOException ex) {
        Logger.getLogger(FleetBean.class.getName()).log(Level.SEVERE, null, ex);
    }
Run Code Online (Sandbox Code Playgroud)

我得到了java.lang.NullPointerException.

Caused by: java.lang.NullPointerException
    at org.mitre.fleetforecast.bean.FleetBean.<init>(FleetBean.java:57)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at java.lang.Class.newInstance(Class.java:433)
    at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:186)
    ... 76 more
Run Code Online (Sandbox Code Playgroud)

任何提供或想到的援助将不胜感激.

Jee*_*eef 6

最后看起来这就是执行这个技巧的代码.我不知道为什么,但显然它有效,我不抱怨.

InputStream inputStream = getClass().getClassLoader()
                         .getResourceAsStream("/ANALYSIS_template.xlsx");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
Run Code Online (Sandbox Code Playgroud)

我从头开始创建了一个新项目,这段代码很有效.谢谢你的帮助!