项目根目录中的文件未包含在战争中

时间:2018-01-10 11:50:40

标签: java servlets war

我是Java部署的新手,现在使用JSON文件存储一些数据并使用新的FileReader(文件名)来调用JSON并解析并进行进一步处理。< / p>

问题:

1)如果我在新的FileReader(文件名)中仅提供文件名,则显示找不到文件

Object obj = parser.parse(new FileReader("file.json"));

JSONArray arr = (JSONArray)obj;

Iterator i = arr.iterator();

这是stacktrace:

java.io.FileNotFoundException: file.json (The system cannot find the file specified)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(Unknown Source)
at java.base/java.io.FileInputStream.<init>(Unknown Source)
at java.base/java.io.FileInputStream.<init>(Unknown Source)
at java.base/java.io.FileReader.<init>(Unknown Source)
at com.login.servlet.CheckAvailability.doGet(CheckAvailability.java:48)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Unknown Source)

如果我提供绝对路径它工作正常,但我想提供相对路径。这样我就不必在localhost和已部署的服务器上不断更改路径。

2)我正在本地工作并尝试在服务器上部署。为此,我制作了.war文件。部署后不显示那些JSON文件

以下是可视化附带的屏幕截图。

look out for the file.json file on local host

look at the deployed folder where there is no file.json file (after making war file)

我试着查看问题,但找不到确切的解决方案或我能理解的问题。

请解释我是新手。

1 个答案:

答案 0 :(得分:0)

在应用程序服务器上,默认路径是服务器启动的路径(即启动服务器时所在的文件夹)或bin文件夹。所以目录和文件应该在其中。检查您所在路径的快速方法是打印或记录f.getAbsolutePath()的结果,这将告诉您服务器默认的文件夹。

您正常打开文件(new File(...))而不是资源,因此不使用资源路径或类路径。

在处理应用程序服务器时,最好避免使用默认路径,因为它很容易更改。要么具有定义文件搜索位置的系统属性或等效属性,要么在运送要与应用程序一起读取的文件时,将其放在WAR中并将其作为资源打开:

YourClass.class.getResourceAsStream("/...");

YourClass.class.getResource("/...");