读取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


相关文章
|
8月前
|
Java
课时103:生成jar文件
本文介绍了Java中生成和使用JAR文件的基本概念与操作。JAR文件用于将多个类文件打包成一个压缩文件,便于管理和分发。通过JDK提供的`jar`命令可以创建JAR文件,并可通过设置CLASSPATH环境变量来配置和使用这些文件。文中还演示了如何定义、编译和打包一个简单的Java程序为JAR文件,并详细解释了JAR文件的结构及配置方法。此外,简要提及了JDK 1.9后引入的模块化系统对JAR文件的影响。
207 1
|
12月前
|
Java 开发者
修改JAR文件工具
本文介绍了一款名为JarEditor的IDEA插件,该插件允许用户直接对JAR包内的文件进行增删改查操作,无需先行解压。通过简单的安装与使用步骤,大大简化了传统上需要解压缩、反编译、重新编译及打包的过程。此外,JarEditor还支持对混淆过的JAR文件进行字节码级别的修改,并提供了强大的搜索功能,支持大小写、全词匹配和正则表达式搜索。对于开发者而言,这款插件无疑极大提高了处理JAR文件的效率和便捷性。
636 14
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
6476 1
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
1513 2
[JarEditor]可直接修改jar包的IDEA插件
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
关系型数据库 Java 分布式数据库
PolarDB产品使用问题之部署到服务器上的Java应用(以jar包形式运行)无法连接,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
监控 Ubuntu Java
如何在Ubuntu上运行Jar包?
【7月更文挑战第9天】
1003 0
如何在Ubuntu上运行Jar包?
|
Java Maven 容器
springBoot项目导入外部jar包
springBoot项目导入外部jar包
1060 4
|
JSON Java Apache
如何查看jar包的官网地址
如何查看jar包的官网地址
438 1

热门文章

最新文章