1.读取jar包内文件
读取包内目录路径,通常都是用ClassLoader 是类加载器的抽象类。
- this.getClass().getResourceAsStream("config.properties");
- Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties")
可以用上面的两种方法来实现读取jar包内的资源文件,可以再用一个。
实际上,jar包内路径是跟我们平常的路径地址有一些区别。
- package edu.hxraid;
- import java.io.*;
- import java.net.URL;
- public class Resource {
- public void getResource() throws IOException{
-
- 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包所在的目录路径。
- <span style="font-family:Microsoft YaHei;font-size:10px;">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) {
-
- e.printStackTrace();
- }
- System.out.println(path);
- }
- </span>
方法二:使用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
所以总得来说两种方法,按需选择采用那种方法。