- 浏览: 236314 次
- 性别:
- 来自: 南京
最新评论
-
gonglil:
貌似不行呢?
java 字符串和二进制相互转换 -
robingdo:
这样关闭proxool连接池以后,项目没报那个错,但是数据库用 ...
Proxool连接池在reload web容器时出现HouseKeeper的空指针异常 -
xb12369:
ezfantasy 写道lord_is_layuping 写道 ...
Java忽略大小写替换和提取字符信息 -
ezfantasy:
lord_is_layuping 写道不区分大小写应该是(?i ...
Java忽略大小写替换和提取字符信息 -
狂盗一枝梅:
hex2byte函数功能是转换成十六进制吧?上面写的是转换成二 ...
java 转换图片为字符串,将字符串转换成图片显示
Java 档案 (Java Archive, JAR) 文件是基于 Java 技术的打包方案。它们允许开发人员把所有相关的内容 (.class、图片、声音和支持文件等) 打包到一个单一的文件中。JAR 文件格式支持压缩、身份验证和版本,以及许多其它特性。 从 JAR 文件中得到它所包含的文件内容是件棘手的事情,但也不是不可以做到。这篇技巧就将告诉你如何从 JAR 文件中取得一个文件。我们会先取得这个 JAR 文件中的文件目录,然后读取指定的文件。 如果你熟悉常见的 ZIP 格式,你会发现 JAR 文件和它区别不大。JAR 文件提供了一个把多个文件打包到一个文件中的方法,而且被打包的每个文件都可以分别压缩。JAR 文件可以添加一个被称为 manifest 的东西,它们允许开发人员添加与内容有关的其它信息。例如,manifest 可以指明由 JAR 文件中的哪一个文件开始运行应用程序,或者指定这个库的版本等。 Java 2 SDK 标准版提供了一个 jar 工具,你可以通过它在控制台下读写 JAR 文件。然后,也许有些时候你想在你的程序中读写 JAR 文件。(这篇技巧仅涉及了在程序中读 JAR 文件的内容。)非常高兴,你可以做到,并且不需要考虑解压的问题,因为类库已经帮你处理了。你要用到的类都在 java.util.jar 包中。这里要用到的主要的类是 JarFile 类,它是一个 .jar 文件自身的引用。其中的每个文件则由 JarEntry 引用。 现在开始,传递一个参数给 JarFile 的构造函数创建一个 JarFile 实例,这个参数可能是 String 也可以是 File,它是一个 .jar 文件的位置: JarFile jarFile = new JarFile("thefile.jar"); 它还有其它一些构造函数,支持身份验证和标记文件为删除。不过这里不会涉及到这些构造函数。 在你得到一个 JAR 文件的引用之后,你就可以读了其内容的目录了。JarFile 的 entries 方法返回一个所有条目的 Enumeration 对象,你还可以从 manifest 文件中获得它的属性、身份验证信息以及其它的信息,如条目的名称和大小。 以前提到过,每个个体都是一个 JarEntry。这个类有一些诸如 getName、getSize 和getCompressedSize 的方法。 如果你用 J2SE 1.4.1 中的 jce.jar 来试验上述的 JarDir 程序,你应该看像下面那样的输出 (在 ... 处应该显示更多文件): 假设你有一个名为 myfiles.jar 的 JAR 文件,其中有一个名为 spider.txt 文本文件,再假设那个 pider.txt 包含如下文本:
或者
File file = new File("thefile.jar");
JarFile jarFile = new JarFile(file);
// 但英文原著发表于 Java 5.0 出现之前,所以可以使用 enum 作变量名
// 为忠于原著,这里未作修改
Enumeration enum = jarFile.entries();
while (enum.hasMoreElements()) {
process(enum.nextElement());
}
让我们举例说明如何在程序中使用这些特性。下面的程序显示 JAR 文件的内容列表及各项的名称、大小和压缩后的大小。(这很类似于使用带 "t" 和 "v" 参数的 jar 命令。)
import java.util.*;
import java.util.jar.*;
public class JarDir {
public static void main (String args[])
throws IOException {
if (args.length != 1) {
System.out.println("Please provide a JAR filename");
System.exit(-1);
}
JarFile jarFile = new JarFile(args[0]);
Enumeration enum = jarFile.entries();
while (enum.hasMoreElements()) {
process(enum.nextElement());
}
}
private static void process(Object obj) {
JarEntry entry = (JarEntry)obj;
String name = entry.getName();
long size = entry.getSize();
long compressedSize = entry.getCompressedSize();
System.out.println(name + " " + size + " " + compressedSize);
}
}
META-INF/MANIFEST.MF 5315 1910
META-INF/4JCEJARS.SF 5368 1958
META-INF/4JCEJARS.DSA 2207 1503
META-INF/ 0 2
javax/ 0 0
javax/crypto/ 0 0
javax/crypto/interfaces/ 0 0
javax/crypto/interfaces/DHKey.class 209 185
javax/crypto/interfaces/DHPublicKey.class 265 215
javax/crypto/interfaces/DHPrivateKey.class 267 215
javax/crypto/interfaces/PBEKey.class 268 224
javax/crypto/SecretKey.class 167 155
...
注意输入内容顶部包含 META-INF 的那几行,这是 menifest 和安全验证信息。其中大小为 0 的项不是文件,而是目录。
要真正从 JAR 文件中读取文件内容,你必须获得相应条目的 InputStream。这不同于 JarEntry。JarEntry 仅包括了入口信息,却并未包含实际的内容。这很像 File 和 FileInputSteram 的区别。只访问 File,永远不会打开相应的文件,它只读取在目录中的信息。下面告诉你如何从一个条目得到 InputStream:
InputStream input = jarFile.getInputStream(entry);
得到输入流之后,你只需要像读其它流一样读它就行了。如果是一个文本流,要记得使用一个 Reader 来从流中获取字符。而对于字节流,如图片,则只好直接读取。
下面的程序演示了从一个 JAR 文件中读取内容。运行程序时,需要指定要从 JAR 文件中读取的文件名,这个文件必须是文本文件类型。
import java.util.jar.*;
public class JarRead {
public static void main (String args[])
throws IOException {
if (args.length != 2) {
System.out.println("Please provide a JAR filename and file to read");
System.exit(-1);
}
JarFile jarFile = new JarFile(args[0]);
JarEntry entry = jarFile.getJarEntry(args[1]);
InputStream input = jarFile.getInputStream(entry);
process(input);
jarFile.close();
}
private static void process(InputStream input)
throws IOException {
InputStreamReader isr =
new InputStreamReader(input);
BufferedReader reader = new BufferedReader(isr);
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
}
}
The itsy bitsy spider
Ran up the water spout
Down came the rain and
Washed the spider out
运行下面的命令以显示 JAR 文件中该文本文件的内容:
java JarRead myfiles.jar spider.txt
关于 JAR 文件更多的内容,请参阅 JAR file specification。
发表评论
-
InnoDB 启动选项
2011-08-03 12:31 1012InnoDB 启动选项 为了 ... -
关于改变innodb_log_file_size后无法启动mysql的问题
2011-08-03 12:29 2236最近在看MYSQL优化的参数,改了innodb_log_fil ... -
larbin中URL的去重-Bloom Filter算法
2010-08-18 17:47 1935读larbin的源码曾经赞叹 ... -
Nginx+tomcat 配置
2010-08-04 15:36 4972本文原址连接:http://bbs.yahunet.com/t ... -
linux cronb定时执行java程序
2010-08-02 18:02 1735环境: RedHat Linux JDK5.0 ... -
用HttpClient来模拟浏览器GET POST
2010-05-26 17:42 957一般的情况下我们都是使用IE或者Navigator浏览器来访问 ... -
JDK API SUN官方下载地址
2010-04-01 11:19 2115http://download.java.net/jdk/jd ... -
Eclipse生成JavaDoc 文件编码解决
2010-02-27 17:04 2074Eclipse导出JavaDoc出现中文乱码解决方法: ... -
Proxool.xml配置文件详细配置说明
2010-02-04 17:58 1756fatal-sql-exception: 它是一 ... -
Java汉语转拼音
2010-01-29 13:59 1410pinyin4j 是Java汉语转拼音 开源框架: h ... -
64位Linux服务器上安装Tomcat
2010-01-21 16:43 3138tomcat 是32位的,安装后在64位环境中不能添加为系统服 ... -
解决web应用用户退出系统后浏览器后退问题
2010-01-13 22:20 46121. 解决用户退出系统后 ... -
response防止页面缓存和重设响应头部
2010-01-13 21:41 1454// 防止缓存 //Forces cache ... -
单元测试使用proxool连接池
2009-12-22 20:29 1450因为proxool连接池一般都是通过tomat web.xml ... -
response防止缓存和重设响应头部
2009-11-30 21:25 32// 防止缓存 response.setHeade ... -
一个奇怪的单例模式
2009-11-15 20:37 883public class Singleton { ... -
MyEclipse下开发邮件发送功能测试失败的原因及处理
2009-11-11 09:09 16991. Exception in thread "ma ... -
java 转换图片为字符串,将字符串转换成图片显示
2009-10-09 20:13 15300java 转换图片为字符串,将字符串转换成图片显示, ... -
java 字符串和二进制相互转换
2009-10-09 19:42 19806二进制转换成字符串: // 二进制转字符串 pub ... -
Java忽略大小写替换和提取字符信息
2009-09-23 15:58 72431. replaceAll 不区分大小写替换字符: ...
相关推荐
主要介绍了Java实现从jar包中读取指定文件的方法,涉及java针对jar文件的读取及查找相关操作技巧,需要的朋友可以参考下
Java读取xls、CSV、xlsx文件所用到的jar包,包括:opencsv-2.3.jar、poi-3.7-20101029.jar、poi-ooxml-3.7-20101029.jar
java 读取jar包文件 java 读取jar包文件
java读JAR包里的配置文件、java读JAR包里的配置文件
Java源文件读取JAR包文件.rar
java读取ini文件的jar包,内含有一个实例.
本资源包换所有读取分析excel的jar包和我写的用这些包读取分析excel文件的两个.java文件。
java读取tar.gz压缩文件的jar包
主要介绍了详解Java读取Jar中资源文件及实现代码的相关资料,在开发java项目的时候,经常会用到jar包,这里就说下如何读取,需要的朋友可以参考下
Java读取xls、CSV、xlsx文件所用到的jar包,包括: dom4j-1.6.1.jar geronimo-stax-api_1.0_spec-1.0.jar opencsv-2.3.jar poi-3.7-20101029.jar poi-examples-3.7-20101029.jar poi-ooxml-3.7-20101029.jar poi-...
Java解析气象数据.nc文件依赖jar包,Java解析气象数据.nc文件依赖jar包
java读取excel文件jar包20181223号传的,没积分可以加我q:504614708,免费给你们
压缩包中包含java读写hdf5格式文件时需要的jar包和动态链接库,动态链接库提供了windows、linux两种版本的
java读取数据库表中内容转存sql文件,然后解析执行此文件
Java主流的Native调用库,其中的args4j-2.0.1.jar,tlbimp.jar,com4j.jar包可以用于处理visio文档,还可以和word,excel交互.
Java读取DBF文件jar包以及测试用例 Java读取DBF文件jar包以及测试用例
新建一个java project ,将poi.jar包导入,将test.java文件复制到项目里面,在e:盘新建一个Book1.exl文件,里面的内容自己定义,运行CODE,就可以在控制台上看到了。
java读取tiff文件,并获得长,高。
jar包、class文件读取工具,java编译后的文件读取
Java读写docx文档所需jar包,通过POI方式 读取docx文档,相关代码在博客中有,可以读取文档内容并替换文档中需要被替换的内容。