Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaEE-WAR-Deployed::如何从资源目录中读取文件_Java_Maven_Jakarta Ee_Glassfish_War - Fatal编程技术网

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

JavaEE-WAR-Deployed::如何从资源目录中读取文件,java,maven,jakarta-ee,glassfish,war,Java,Maven,Jakarta Ee,Glassfish,War,我相信“正确”的方法应该是getResourceAsStream(),但它似乎并没有解决这个问题 我的情况: 我有一个Java的web应用程序,最终将部署到几个不同的web服务器上。可能是GlassFish、Tomcat和WildFly。目前我正在使用Netbeans开发mac,我可以访问WildFly和GlassFish。这个项目是专业化的 我需要做的是读写两个不同的Excel文件。一个用作“模板”,另一个用作输出文件。该应用程序以前是独立运行的,我正试图将其包装到JSF网站中 我需要为我的方

我相信“正确”的方法应该是
getResourceAsStream()
,但它似乎并没有解决这个问题

我的情况:

我有一个Java的web应用程序,最终将部署到几个不同的web服务器上。可能是GlassFishTomcatWildFly。目前我正在使用Netbeans开发mac,我可以访问WildFlyGlassFish。这个项目是专业化的

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

/src/main/resources/ANALYSIS_template.xlsx
我想我可能已经通过以下命令获得了文件的输入流:

InputStream is1 = getClass().getResourceAsStream("ANALYSIS_template.xlsx");
我还尝试了
(“/ANALYSIS\u 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
原因:java.lang.NullPointerException
在org.mitre.fleetforecast.bean.FleetBean.(FleetBean.java:57)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:408)
位于java.lang.Class.newInstance(Class.java:433)
位于com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:186)
... 76多

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

像这样的事情怎么样:

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

编辑:

从servlet容器访问文件时使用此选项

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

这是否可能是文件的相对路径与文件的绝对路径之间的问题?
您可以尝试使用FileInputStream并使用绝对路径吗?如果这样做行得通,那么您可能只需要修改相对路径?

最后,看起来这就是实现此技巧的代码。我不知道为什么,但很明显,它起了作用,我没有抱怨

InputStream inputStream = getClass().getClassLoader()
                         .getResourceAsStream("/ANALYSIS_template.xlsx");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

我从scratch开始做了一个新项目,这段代码很有效。谢谢你们的帮助

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

String path = Thread.currentThread().getContextClassLoader().getResource("language/file.xml").getPath();
File f = new File(path);
System.out.println(f.getAbsolutePath());

您肯定不想使用绝对路径或包含
/usr/local
src/main
之类内容的路径。。。我的java代码没有使用绝对路径->我只是指出了它们在文件系统上的位置,或者这两个看起来都不起作用,但我仍然被卡住了。也许午饭后是神的启示。你所建议的一切都是互联网所说的正确方法。我想知道是否还有其他的事情在进行……这是有帮助的,但最终它不是正确的代码。我还是投票支持你当助教谢谢你的支持。这是个好主意。我明天早上试试看。