打jar包之后读不到properties文件 | 您所在的位置:网站首页 › maven读取properties文件 › 打jar包之后读不到properties文件 |
(1)在Spring项目中有专门读取properties文件的类 代码如下: import org.springframework.core.io.support.PropertiesLoaderUtils;Properties ret = PropertiesLoaderUtils.loadProperties(new ClassPathResource("XXX.properties")); rs = ret.getProperty("proname"); (2)在普通项目中读取properties文件 Properties properties = new Properties(); InputStream in = this.getClass().getClassLoader().getResourceAsStream("/configfilename.properties");properties.load(in); String str = properties.getProperty("name");
https://blog.csdn.net/weixin_44474427/article/details/88365330 遇到的问题是项目打成jar包后无法读取到jar包内的properties文件 发现在eclipse里一切正常,但打成jar包后就无法读取到properties文件了。之前的程序是这样获取配置文件的: Thread.currentThread().getContextClassLoader().getResource("").getPath() +filename+".properties") 来获取properties文件,但发现一运行就报错.后来将代码改成: this.getClass().getClassLoader().getResourceAsStream(filename+".properties") 一切正常~ 关于java 的 classloader 还是有点概念不清,需要补补~~ 一般在项目中使用properties配置文件的时候都将相关的properties文件放在src目录下,在将该app打包生成jar后,相应的properties配置文件生成在jar包中,这样的话要修改配置文件又要重新打jar包,那是相当的麻烦。。你肯定想将配置文件放在其他的目录下例如下面的conf文件,生成的jar包内不包含相应的配置文件,修改配置文件无需重新打包,没错,下面就是一种解决方案了。读取jar包内配置文件: InputStream in = this.getClass().getClassLoader().getResourceAsStream("/configfilename.properties"); 读取jar包外配置文件: String filePath = System.getProperty("user.dir") + "/conf/configfilename.properties"; InputStream in = new BufferedInputStream(new FileInputStream(filePath)); 总结: 1. System.getProperty("user.dir") 获得项目的绝对路径,然后拼装配置文件的路径。 原文链接:https://blog.csdn.net/daoshud1/java/article/details/77646074 关于打包 https://www.cnblogs.com/wqbin/p/11128581.html 项目右键→Export(JAR file/Runnable JAR file) (1)直接运行 .class的方法 java -cp . com.guangfa.demo1 不用加.class后缀 java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库和jar包,需要全路径到jar包,多个jar包之间连接符:window上分号“;”.Linux下使用“:”。 https://www.cnblogs.com/klb561/p/10513575.html (2)从eclipse中export 的jar file,仅仅是把.class打包了。 执行这种jar file需要用 java -cp .;demo1.jar com.guangfa.demo1 如果还应用到另外的lib库,必须在cp里说明,也就是 java -cp .;demo1.jar;lib01.jar;lib02.jar com.guangfa.demo1 来执行。demo1.jar也在cp里面,demo1.jar就是lib库,最后的参数指明了要被执行的类名。 (3)如果从eclipse里export出的是 runnable jar file, 那么个执行这个jar包的时候是不需要指明哪个类的,直接这样执行 java -jar demo1.jar。 原因就是jar包中的MANIFEST.MF内容不同。 runnable jar包中指明哪个类先执行,所以你可以用 java -jar demo1.jar来执行你想要执行的代码,而不必指明具体哪个类。这个你可以打开 jar包查看MANIFEST.MF的区别
生成runnable jar file时,有两个选项,Extract required libraries into generated JAR 和 package equired libraries into generated JAR。 前者是把用到的.class 文件提取出来,后者则是把所需要的所有jar包都打进一个包里。两者的MANIFEST.MF文件内容也有所不同,这应该是eclipse造成的
|
CopyRight 2018-2019 实验室设备网 版权所有 |