读取jar包所在目录和jar包内文件

本文总结了读取jar包内文件和获取jar包所在目录的方法。对于jar包内文件,通常使用ClassLoader;获取jar包路径,可以采用类路径或JVM属性,但需注意中文路径转码及不同执行方式下的输出差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在网上查找了很多关于读取jar包的相对路径资料,但是大多都是读取jar包内文件的方法介绍,甚至有人将读取包内路径的方法混淆为读取包外路径的方法。经过本人亲自的测试,对于两种读取文件的方法有一点的总结。

1.读取jar包内文件

        读取包内目录路径,通常都是用ClassLoader 是类加载器的抽象类。

        

this.getClass().getResourceAsStream("config.properties"); //返回的是一个InputStream
Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties")//返回的是一个InputStream

        可以用上面的两种方法来实现读取jar包内的资源文件,可以再用一个。

        实际上,jar包内路径是跟我们平常的路径地址有一些区别。

package edu.hxraid;    
import java.io.*;    
import java.net.URL;    
public class Resource {    
    public  void getResource() throws IOException{      
        //查找指定资源的URL,其中res.txt仍然开始的bin目录下     
        URL fileURL=this.getClass().getResource("/resource/res.txt");     
        System.out.println(fileURL.getFile());    
    }    
    public static void main(String[] args) throws IOException {    
        Resource res=new Resource();    
        res.getResource();    
    }    
}    


        当程序打包成jar时执行上面代码会有下面的输出。

        file:/C:/ResourceJar.jar!/resource/res.txt

2.读取jar包所在目录的路径

方法一:使用类路径

      读取jar包的所在目录可以使用

      String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

      但是使用这个方法如果有路径中包含中文,则需要使用 java.net.URLDecoder.decode(path, “UTF-8″) 方法进行转码,如下代码:读取jar包所在的目录路径。

public void main(String arg[]){
        path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
		path = path.substring(1,path.length());
		int endIndex = path.lastIndexOf("/");
		path = path.substring(0, endIndex);
		try {
			path = java.net.URLDecoder.decode(path, "utf-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(path);
}
方法二:使用JVM属性

        使用jvm属性读取jar包的所在目录可以使用 

   String path = System.getProperty("java.class.path")

      但是这个方法虽然不需要做转码处理,但是当打包成jar时,

      如果执行执行: java -jar e:/test.jar

      输出是   e:/test.jar

      如果先到jar包所在目录,在执行: java -jar test.jar

      输出是   test.jar

所以总得来说两种方法,按需选择采用那种方法。

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值