读取jar包内外文件

目录

读取jar包中文件

概述

读取jar外部文件


读取jar包中文件

概述

1、ClassLoader 是类加载器的抽象类。它可以在运行时动态的获取加载类的运行信息。 可以这样说,当我们调用ResourceJar.jar中的Resource类时,JVM加载进Resource类,并记录下Resource运行时信息(包括Resource所在jar包的路径信息)。而ClassLoader类中的方法可以帮助我们动态的获取这些信息:
          ● public URL getResource(String name) 
            查找具有给定名称的资源。资源是可以通过类代码以与代码基无关的方式访问的一些数据(图像、声音、文本等)。并返回资源的URL对象。
          ● public InputStream getResourceAsStream(String name); 
             返回读取指定资源的输入流。这个方法很重要,可以直接获得jar包中文件的内容。
         
2、ClassLoader是abstract的,不可能实例化对象,更加不可能通过ClassLoader调用上面两个方法。所以我们真正写代码的时候,是通过Class类中的getResource()和getResourceAsStream()方法,这两个方法会委托ClassLoader中的getResource()和getResourceAsStream()方法 。

若我们要访问项目中的资源文件,则一般使用相对路径或者用System.getProperities("user.dir")得到项目根目录,然后再访问资源文件,但是在将该工程和资源文件打包为jar包,运行该jar文件时,会显示找不到资源文件的错误。

解决方法:使用Class.getResource或者是ClassLoader.getResourceAsStream()将文件内容放到InputStream中,具体使用如下:

String s1 = this.getClass().getResource("/library.properties").getPath();

注意,使用class的getRescource时,要注意路径前要加"/",即根目录,此处的根目录是src

在使用ClassLoader时,路径前面不能加"/",使用相对路径。

@Test
    public void demo(){
        System.out.println(System.getProperty("user.dir"));
        String class_str2 = this.getClass().getResource("/logback-spring.xml").getPath();
        String classLoader_str = this.getClass().getClassLoader().getResource("logback-spring.xml").getPath();
        InputStream is =         this.getClass().getClassLoader().getResourceAsStream("logback-spring.xml");
        System.out.println(class_str2);
        System.out.println(classLoader_str);
        System.out.println(is == null );
    }



E:\idea_workspace\yanchang
/E:/idea_workspace/yanchang/target/classes/logback-spring.xml
/E:/idea_workspace/yanchang/target/classes/logback-spring.xml
false

 

读取jar外部文件

文件目录结构如下图

data里面放着我们要访问的数据,数据如下图所示

code.jar是可执行jar包,jar包中的代码欲访问data中的数据,那么我们可以在jar包中的任何类中编写一下代码即可访问与jar包同目录下的文件了

File file = new File(System.getProperty("user.dir") + "/data/a.txt");

 System.getProperty("user.dir")执行结果在eclipse工程和jar包中是不一样

  • 在eclipse中,返回的是工程根目录(不是bin目录)即D:\code\test_project
  • 在命令行中运行jar包,返回的是jar包所在的目录,比如上面例子中就是返回D:\code
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序三两行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值