一個文件,我相信「正確」的方法之一是應該做的,這是getResourceAsStream()
,但它只是似乎並沒有削減它。JavaEE的 - 戰爭 - 部署::如何讀取資源目錄
我的情況:
我在Java的Web應用程序將被部署最終以幾個不同的Web服務器的可能性是GlassFish的,Tomcat的,並WildFly。目前我正在與Netbeans一起使用mac,我可以訪問WildFly和GlassFish。該項目是mavenized
我需要做的是讀取和寫入兩個不同的Excel文件。一個用作「模板」,一個用作輸出文件。該應用程序以前運行獨立,我試圖將其包裝到一個JSF網站。
我需要爲我的一個方法獲得FileInputStream
,並最終創建一個輸出文件,該文件將通過http返回給用戶。
從我所收集合適的方式做到這一點應該是:
XLSX文件
/src/main/resources/ANALYSIS_template.xlsx
位置一旦編譯成WAR文件:: WildFly
/usr/local/opt/wildfly-as/libexec/standalone/deployments/fleetForecast-1.0-SNAPSHOT.war/WEB-INF/classes/ANALYSIS_template.xlsx
曾編譯成WAR文件的位置:: GlassFish
~/devel/fleetforecast/target/fleetForecast-1.0-SNAPSHOT/WEB-INF/classes/ANALYSIS_template.xlsx
Java代碼的
我想我也許設法得到一個輸入流與命令文件:
InputStream is1 = getClass().getResourceAsStream("ANALYSIS_template.xlsx");
我也被嘗試("/ANALYSIS_template.xlsx")
行爲相似的方式。當我嘗試從此輸入流中讀取時
try {
is1.read();
} catch (IOException ex) {
Logger.getLogger(FleetBean.class.getName()).log(Level.SEVERE, null, ex);
}
我收到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
提供或想到的任何援助將不勝感激。
你肯定不希望使用絕對路徑或含有像'在/ usr/local'或'的src/main東西路徑'...查看[this](http://www.jugsardegna.org/vqwiki/jsp/Wiki?LoadResourcesOnJ2EEWebApplications)。 – jahroy
我的java代碼沒有使用絕對路徑 - >我只是指出它們在文件系統上的位置 – poosliver