gpt4 book ai didi

java - 从 WAR 文件读取文件时出现问题

转载 作者:行者123 更新时间:2023-12-01 09:35:21 25 4
gpt4 key购买 nike

我有一个具有以下结构的 war 文件。

--js
--sum.js
--WEB-INF
--classes
---com
-----test
-----MyTest.class
--home.html

我正在尝试读取 MyTest.class 文件中的 js 文件,但在读取它时出现异常。我尝试了堆栈中已经提到的大多数解决方案。

我已经尝试过

1)

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

第一行抛出空指针异常

2)

InputStream in =MyNashHornTest.class.getClassLoader().getResourceAsStream("/js/sum.js");
BufferedReader br = new BufferedReader(new InputStreamReader(in));

第二行抛出空指针异常

3)

InputStream in =MyNashHornTest.class.getClassLoader().getResourceAsStream("../../../../js/sum.js");
BufferedReader br = new BufferedReader(new InputStreamReader(in));

第二行抛出空指针异常

请帮我解决这个问题。

最佳答案

对于 war 文件,不要使用 servlet 容器的类加载器,而是使用 ServletContext。

此方法允许 servlet 容器从任何位置为 servlet 提供资源,而无需使用类加载器。

ServletContext context = getServletContext();
InputStream is = context.getResourceAsStream("/yourfilename.txt");

如果您不希望浏览器能够访问它,建议将其保留在/WEB-INF 目录下。

路径必须以 « / » 开头并被解释为相对于当前上下文根。如果指定路径中不存在资源,则此方法返回 null。例如ServletContext.getResourceAsStream(« WEB-INF/resources/yourfilename.cnf »)会返回一个nul异常,所以要小心!

为什么会出现空指针?

路径必须以“/”开头,并被解释为相对于当前上下文根。如果指定路径中不存在资源,则此方法返回 null。例如,使用不以斜杠开头的路径,您将得到 null 返回值。

详细说明如下:How to use ServletContext.getResourceAsStream(java.lang.String path)?

资源链接:

HOW TO: Read a file from jar and war files (java and webapp archive) ?

关于java - 从 WAR 文件读取文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39018791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com