在jar包在读取配置是找不到文件

打包好的jar包在读取配置文件时找不到文件的问题,结果试了很多方法。有些方法在IDE环境下可以正常读取配置文件,但是打包后将jar包放在服务器上就会出现找不到配置文件的异常。有时打开jar还会发现配置文件没有在jar里,所以问题应该是两个问题,一个是配置文件没有加载到jar里。二是真的找不到配置文件

读取jar包中的资源用下面的方式:

InputStream is=this.getClass().getResourceAsStream("/resource/res.txt");  
BufferedReader br=new BufferedReader(new InputStreamReader(is)); 

其中/resource/res.txt是jar包中的资源文件。
this.getClass()是jar包中的某一个类

    1. 配置文件没有加载到jar里
    将java工程打包成可执行的jar时,根目录下的配置文件都不会装载到jar里。但是可以装在根目录下某个文件夹里的properties文件。所以可以在项目根目录下新建一个config的文件,里面放置项目需要的一系列配置文件
    2. 读取配置文件
    读取配置文件的方法有很多,常见的如下:
    1)我们加载log4j.properties一般使用的是PropertyConfigurator.configure("log4j.properties");,如果我们打开configure方法就会发现,里面使用的是FileInputStream类来加载log4j.properties,而此时log4j.properties是放在项目根目录下。
    2)也可以使用ResourceBundle bundle = ResourceBundle.getBundle("config/resconfig");,使用这种方式会遇到中文问题。当配置文件中有中文或者中文符号时,读取出来的数据就会出现乱码,因为ResourceBundle在读取properties文件时统一使用iso8859-1编码。解决办法一是在使用keyValue时,进行编码转换,String value = new String(bundle.getString(key).getBytes("ISO-8859-1"), "XXX"); 二是,将*.properties转换成为unicode形式,但是我们一般创建配置文件都是使用UTF-8格式编码成都网站推广
    3)使用流的方式读取,就想log4j封装的方法一样,但是要保证配置文件放在根目录下的某个文件夹下
    Properties prop=new Properties();

    prop.load(new InputStreamReader(ChiqEPGTask.class.getClassLoader().getResourceAsStream("config/channel.properties"), "UTF-8"));

    java 程序打包为jar发布后,读取配置文件路径出错 ,怎样获取配置文件路径?
    把配置文件ccc.xml放到编译路径,如src/com.aaa.aa下面,然后再根据
    String rootPath=Xxxx.class.getResource("/").getPath();
    获取到编译的根路径,配置文件的地址就是rootPath+"com/aaa/aa/ccc.xml"

在Java,当你需要从一个jar包读取外部配置文件时,你可以采取以下步骤: 1. 确定配置文件的位置:首先,你需要确定配置文件的存放位置。配置文件通常放在项目的资源目录下(例如`src/main/resources`),打包成jar后,这些资源文件会位于jar包的`META-INF`目录下。 2. 获取资源流:在你的Java代码,你可以使用类加载器(ClassLoader)来获取资源文件的输入流。可以使用`Thread.currentThread().getContextClassLoader()`或者`getClass().getClassLoader()`来获取当前线程的上下文类加载器或当前类的类加载器。 3. 读取文件内容:有了输入流之后,你可以使用IO流(如`BufferedReader`)来读取配置文件的内容。 下面是一个示例代码,展示如何在Java读取位于`META-INF`目录下的配置文件`config.properties`: ```java import java.io.InputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.util.Properties; public class ConfigReader { public static Properties readConfig() { Properties config = new Properties(); try { // 使用当前类的类加载器获取资源输入流 InputStream inputStream = ConfigReader.class.getClassLoader().getResourceAsStream("META-INF/config.properties"); if (inputStream == null) { throw new RuntimeException("No config.properties found in the classpath."); } config.load(new InputStreamReader(inputStream, "UTF-8")); } catch (Exception e) { e.printStackTrace(); } return config; } public static void main(String[] args) { Properties config = readConfig(); // 输出读取到的配置信息,例如: System.out.println(config.getProperty("key")); } } ``` 请注意,配置文件读取可能会出现文件不存在、文件读取错误等情况,因此应当妥善处理这些异常情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值