我已阅读帖子:
Viewing contents of a .jar file
和
How do I list the files inside a JAR file?
但遗憾的是,我无法找到一个好的解决方案来实际读取 JAR的内容(逐个文件)。
此外,有人可以给我一个提示,或指向一个资源,我的问题在哪里讨论?
我只能想到一个不那么直截了当的方法来做到这一点:
我可以以某种方式将JAR资源列表转换为列表
内部JAR URL,然后我可以使用openConnection()打开。
答案 0 :(得分:8)
您使用JarFile打开Jar文件。有了它,你可以使用'getEntry(String name)'或'entires'来获得ZipEntry或JarEntry(它们可以被视为相同的东西)。获得Entry后,您可以通过调用“JarFile.getInputStream(ZipEntry ze)”来使用它来获取InputStream。那么你可以从流中读取数据。
查看教程here。
答案 1 :(得分:3)
以下是我将其作为ZIP文件阅读的方式,
try {
ZipInputStream is = new ZipInputStream(new FileInptuStream("file.jar"));
ZipEntry ze;
byte[] buf = new byte[4096];
int len;
while ((ze = is.getNextEntry()) != null) {
System.out.println("----------- " + ze);
len = ze.getSize();
// Dump len bytes to the file
...
}
is.close();
} catch (Exception e) {
e.printStackTrace();
}
如果要解压缩整个文件,这比JarFile方法更有效。
答案 2 :(得分:2)
这是完整的代码,它读取jar文件中的所有文件内容。
public class ListJar {
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();
}
public static void main(String arg[]) throws IOException {
JarFile jarFile = new JarFile("/home/bathakarai/gold/click-0.15.jar");
final Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
final JarEntry entry = entries.nextElement();
if (entry.getName().contains(".")) {
System.out.println("File : " + entry.getName());
JarEntry fileEntry = jarFile.getJarEntry(entry.getName());
InputStream input = jarFile.getInputStream(fileEntry);
process(input);
}
}
}
}