从JAR文件中读取文件 (2)
如果你用j2se1.4.1中的jce.jar作为参数运行上面的jardir程序,你将看到类似于下面的输出(...部分为省略掉的输出):
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行。这是manifest和安全认证信息。0字节的entries不是文件,但是有点相当于目录。
为了从jar文件中真正读取一个指定的文件,你必须到其entry的inputstream。这和jarentry不一样。这是因为jarentry只是包含该entry的有关信息,但是并不实际包含该entry的内容。这和file和fileinputstream的区别有点儿相似。访问文件没有打开文件,它只是从目录中读取了该文件的信息。下面是如何得到entry的inputstream:
inputstream input = jarfile.getinputstream(entry);
当你有了输入流,你就可以像读取其他流一样读取它。在文本流中(text stream),记得使用读取器(reader)从流中取得字符。对于面向字节的流,如图片文件,直接读取就行了。
下面的程序演示如何从jar文件中读取文件。指定jar文件的名称,要读取的文件的名称(打包jar文件中的某一个文件)作为参数来调用该程序。要读取的文件应该有一个文本类型的。
import java.io.*;
import java.util.jar.*;
(文章来源 www.iocblog.net)
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();
}
}
假设在myfiles.jar文件中有一个spider.txt文件,spider文件的内容如下:
the itsy bitsy spider
ran up the water spout
down came the rain and
washed the spider out
你可以通过下面的命令来显示该文本文件的内容:
java jarread myfiles.jar spider.txt
有关jar文件的更多内容,请参考jar文件规范
(文章来源 www.iocblog.net)
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。