Reading content of a JAR file (at runtime)?
本问题已经有最佳答案,请猛点这里访问。
我已阅读以下帖子:
查看.jar文件的内容
和
如何在JAR文件中列出文件?
但是,可悲的是,我找不到真正读取JAR内容(逐个文件)的好的解决方案。
此外,有人可以给我提示或指向讨论我的问题的资源吗?
我只是想出一种不太简单的方法来做到这一点:
我可以以某种方式将JAR资源列表转换为
内部JAR URL,然后可以使用openConnection()打开。
您使用JarFile打开一个Jar文件。 有了它,您可以通过使用'getEntry(String name)'或'entires'获得ZipEntry或JarEntry(它们可以看作同一东西)。 收到条目后,可以通过调用" JarFile.getInputStream(ZipEntry ze)"将其用于获取InputStream。 好了,您可以从流中读取数据。
在此处查看教程。
这是我将其读取为ZIP文件的方式,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | try { ZipInputStream is = new ZipInputStream(new FileInputStream("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方法更有效。
这是读取jar文件中所有文件内容的完整代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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); } } } } |