java读取jar中的资源_读取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);// 获得键盘输入的值

}

}


版权声明:本文为weixin_29548281原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。