打jar包之后读不到properties文件 您所在的位置:网站首页 maven读取properties文件 打jar包之后读不到properties文件

打jar包之后读不到properties文件

2023-12-21 16:26| 来源: 网络整理| 查看: 265

(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 实验室设备网 版权所有