[java]打包成jar之后找不到文件FileNotFoundException
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[java]打包成jar之后找不到文件FileNotFoundException相关的知识,希望对你有一定的参考价值。
jar包放在c盘命名为Test.jar,以压缩方式打开的话,可以看到文件夹A中有B.xxx(一个可以读的excel文件)[在eclipse里面运行是没有任何问题的]
但是做成jar包之后异常提示
file:\C:\Test.jar!\A\B.xxx<文件名、目录名或卷标语法不正确>
是不是这个路径语法有问题?
我是用的
getClass().getResource("/A/B.xxx");
获得的路径
jsp中获得文件路径servlet中获得文件路径java中获得文件路径jsp中获得文件路径
1、根目录所对应的绝对路径:request.getRequestURI();
2、文件的绝对路径:application.getRealPath(request.getRequestURI())
3、当前web应用的绝对路径:application.getRealPath("/")
4、取得请求文件的上层目录:
newFile(application.getRealPath(request.getRequestURI())).getParent()
servlet中获得文件路径
1、根目录所对应的绝对路径:request.getServletPath()
2、文件的绝对路径:
request.getSession().getServletContext().getRealPath(request.getRequestURI())
3、当前web应用的绝对路径:servletConfig.getServletContext().getRealPath("/")
注:ServletContext对象获得几种方式:
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
java中获得文件路径
1、Thread.currentThread().getContextClassLoader().getResource("").toURI().getPath()
2、MyClass.class.getClassLoader().getResource("").toURI().getPath()
3、ClassLoader.getSystemResource("").toURI().getPath()
4、MyClass.class.getResource("").toURI().getPath()
5、MyClass.class.getResource("/").toURI().getPath()
6、newFile("/").getAbsolutePath().toURI().getPath()
7、System.getProperty("user.dir").toURI().getPath()
希望能帮到你本回答被提问者采纳
spring boot打包后找不到资源文件
【中文标题】spring boot打包后找不到资源文件【英文标题】:Spring boot can not find resource file after packaging 【发布时间】:2019-05-31 21:23:03 【问题描述】:我使用 Spring boot maven 插件将应用程序打包为 jar 文件。
在Itellij IDE中可以找到直接运行的资源文件, 但是之后找不到资源文件,显示错误为:
java.io.FileNotFoundException: 类路径资源 [jmxremote.password] 无法解析为绝对文件路径,因为它不驻留在文件系统中:jar:file:/home/XXX/target/YYY.jar!/ BOOT-INF/classes!/jmxremote.password
但是,jar文件中确实存在“jmxremote.password”文件。
private Properties initialJMXServerProperties() throws RuntimeException
URL passwordURL = JMXConfig.class.getClassLoader().getResource(passwordFileName);
URL accessURL = JMXConfig.class.getClassLoader().getResource(accessFileName);
String passFile = Optional.ofNullable(passwordURL).map(URL::getPath).orElseThrow(() -> new RuntimeException("JMX password file not exist"));
String accessFile = Optional.ofNullable(accessURL).map(URL::getPath).orElseThrow(() -> new RuntimeException("JMX access file not exist"));
Properties properties = new Properties();
properties.setProperty(PASSWORD_FILE_PROP, passFile);
properties.setProperty(ACCESS_FILE_PROP, accessFile);
return properties;
【问题讨论】:
Can not read spring boot packaging jar file的可能重复 【参考方案1】:您不能将 JAR 文件作为 URL 加载。您必须将其作为 InputStream 加载。
在你的情况下:
InputStream passwordInputStream =
JMXConfig.class.getClassLoader().getResourceAsStream(passwordFileName);
在此处阅读更多信息: Reading a resource file from within jar
【讨论】:
【参考方案2】:我也遇到过类似的问题。
class SomeClass
@Autowired
ResourceLoader resourceLoader;
void someFunction()
Resource resource=resourceLoader.getResource("classpath:preferences.json");
Preferences defaultPreferences = objectMapper.readValue(resource.getInputStream(), Preferences.class);
在本例中,我已将 JSON 数据映射到 Preferences 类。在您的情况下,您可以使用
resource.getURL()
供进一步使用。这适用于开发环境和部署,这意味着它也可以在您在 tomcat 中构建和部署 JAR/WAR 或使用 java -jar 时使用。
【讨论】:
以上是关于[java]打包成jar之后找不到文件FileNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章
java工程打包部署到linux下根据url找jar包里的文件找不到,请教。