java war目录_关于java:JavaEE-WAR-部署::如何从资源目录读取文件

本问题已经有最佳答案,请猛点这里访问。

我相信人们应该做的"正确"方法是getResourceAsStream(),但它似乎并没有削减它。

我的情况:

我有一个使用Java的Web应用程序,该应用程序最终将部署到一些不同的Web服务器上,可能是GlassFish,Tomcat和WildFly。目前,我正在使用Netbeans在Mac上工作,并且可以使用WildFly和GlassFish。该项目被美化

我需要做的是读写两个不同的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.(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

任何提供或想到的帮助将不胜感激。

您绝对不希望使用绝对路径或包含诸如usrlocal或srcmain之类的内容的路径。

我的Java代码未使用绝对路径->我只是指出它们在文件系统上的位置

最后,看起来这是完成窍门的代码。 我不知道为什么,但是显然它起作用了,我没有抱怨。

InputStream inputStream = getClass().getClassLoader()

.getResourceAsStream("/ANALYSIS_template.xlsx");

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

我从头开始创建了一个新项目,此代码起作用了。 感谢您的帮助!

那么这样的事情呢:

InputStream is1 = URLClassLoader.getSystemResourceAsStream("/classes/ANALYSIS_template.xlsx");

要么

InputStream is1 = this.getClass().getResourceAsStream("/classes/ANALYSIS_template.xlsx"));

编辑:

从Servlet容器访问文件时使用此方法

InputStream is1 = ServletContext.getResourceAsStream("/WEB-INF/classes/ANALYSIS_template.xlsx") ;

对不起,这些似乎都没有用

谢谢,但我仍然坚持。 午餐后也许是神圣的灵感。 您所建议的一切都是互联网所说的正确方法。 我不知道是否还有其他粗略的事情在发生...

这很有帮助,但最终它不是正确的代码。 我还是投票支持你

感谢您的投票。

如果要获取java File对象,可以尝试以下操作:

String path = Thread.currentThread().getContextClassLoader().getResource("language/file.xml").getPath();

File f = new File(path);

System.out.println(f.getAbsolutePath());

这是文件的相对路径与文件的绝对路径的潜在问题吗?

您可以尝试使用FileInputStream并使用绝对路径吗? 如果可行,那么您可能只需要修改相对路径?

那是个好主意。 明天早上我会尝试的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值