读取jar包中资源文件的两种方法

一、构造url

// 生成资源URL://jar:file:/D:\workspace\project\test.jar!/plugin.xml

URL fileURL = new URL("jar:file:/"+dirPath+"!/plugin.xml");

// 通过java.url.openStream()返回这个url的字节流。

InputStream input =  fileURL.openStream();   

        InputStreamReader in = new InputStreamReader(input);// 创建输入读流
BufferedReader reader = new BufferedReader(in);// 创建缓冲读流
String line;
while ((line = reader.readLine()) != null) {// 循环显示文件内容
System.out.println(line);
}
        reader.close();// 关闭缓冲读流
        jarFile.close();// 关闭JAR文件对象流。

二、使用工具类java.util.jar.*

JarFile jarFile = new JarFile(jarFileName);// 根据传入JAR文件创建JAR文件对象
JarEntry entry = jarFile.getJarEntry("plugin.xml");// 获得JAR文件中的单个文件的JAR实体
InputStream input = jarFile.getInputStream(entry);// 根据实体创建输入流
        InputStreamReader in = new InputStreamReader(input);// 创建输入读流
BufferedReader reader = new BufferedReader(in);// 创建缓冲读流
String line;
while ((line = reader.readLine()) != null) {// 循环显示文件内容
System.out.println(line);
}
        reader.close();// 关闭缓冲读流
        jarFile.close();// 关闭JAR文件对象流

在做项目时最先使用的是第一种方法,直接将jar看做文件夹构造出url进行处理。但是后来发现在这种方法在linux环境下不适用,构造的url非法导致无法使用openstream()。

所以建议使用第二种方法。

详细的jar包处理方式可参见这篇博客http://javasam.iteye.com/blog/1486803提供的方法:

package com.file; 


import java.util.*; 
import java.util.jar.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;


public class OperatorJAR { // 操作JAR文件的类
public static void readJARList(String fileName) throws IOException {// 显示JAR文件内容列表
JarFile jarFile = new JarFile(fileName); // 创建JAR文件对象
Enumeration en = jarFile.entries(); // 枚举获得JAR文件内的实体,即相对路径
System.out.println("文件名\t文件大小\t压缩后的大小");
while (en.hasMoreElements()) { // 遍历显示JAR文件中的内容信息
process(en.nextElement()); // 调用方法显示内容
}
}


private static void process(Object obj) {// 显示对象信息
JarEntry entry = (JarEntry) obj;// 对象转化成Jar对象
String name = entry.getName();// 文件名称
long size = entry.getSize();// 文件大小
long compressedSize = entry.getCompressedSize();// 压缩后的大小
System.out.println(name + "\t" + size + "\t" + compressedSize);
}


public static void readJARFile(String jarFileName, String fileName)
throws IOException {// 读取JAR文件中的单个文件信息
JarFile jarFile = new JarFile(jarFileName);// 根据传入JAR文件创建JAR文件对象
JarEntry entry = jarFile.getJarEntry(fileName);// 获得JAR文件中的单个文件的JAR实体
InputStream input = jarFile.getInputStream(entry);// 根据实体创建输入流
readFile(input);// 调用方法获得文件信息
jarFile.close();// 关闭JAR文件对象流
}


public static void readFile(InputStream input) throws IOException {// 读出JAR文件中单个文件信息
InputStreamReader in = new InputStreamReader(input);// 创建输入读流
BufferedReader reader = new BufferedReader(in);// 创建缓冲读流
String line;
while ((line = reader.readLine()) != null) {// 循环显示文件内容
System.out.println(line);
}
reader.close();// 关闭缓冲读流
}


public static void main(String args[]) throws IOException {// java程序主入口处
OperatorJAR j = new OperatorJAR();
System.out.println("1.输入一个JAR文件(包括路径和后缀)");
Scanner scan = new Scanner(System.in);// 键盘输入值
String jarFileName = scan.next();// 获得键盘输入的值
readJARList(jarFileName);// 调用方法显示JAR文件中的文件信息
System.out.println("2.查看该JAR文件中的哪个文件信息?");
String fileName = scan.next();// 键盘输入值
readJARFile(jarFileName, fileName);// 获得键盘输入的值
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值