1

我有一个具有以下结构的 JAR 文件:

com
-- pack1
   -- A.class
-- pack2
   -- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.class

当我尝试读取、提取或重命名pack2/AA...AA.class(文件名长度为 262 字节)时,Linux 和 Windows 都说文件名太长。在 JAR 文件中重命名也不起作用。

任何想法如何解决这个问题并使长类文件可读?

4

2 回答 2

2

java.util.jar可以处理:

try {
    JarFile jarFile = new JarFile("/path/to/target.jar");
    Enumeration<JarEntry> jarEntries = jarFile.entries();
    int i = 0;
    while (jarEntries.hasMoreElements()) {
        JarEntry jarEntry = jarEntries.nextElement();
        System.out.println("processing entry: " + jarEntry.getName());
        InputStream jarFileInputStream = jarFile.getInputStream(jarEntry);
        OutputStream jarOutputStream = new FileOutputStream(new File("/tmp/test/test" + (i++) + ".class")); // give temporary name to class
        while (jarFileInputStream.available() > 0) {
            jarOutputStream.write(jarFileInputStream.read());
        }
        jarOutputStream.close();
        jarFileInputStream.close();
    }
} catch (IOException ex) {
    Logger.getLogger(JARExtractor.class.getName()).log(Level.SEVERE, null, ex);
}

输出将test<n>.class针对每个类。

于 2013-11-15T17:54:46.260 回答
2

此页面列出了文件系统的通常限制:http ://en.wikipedia.org/wiki/Comparison_of_file_systems

正如您在“限制”部分中看到的,几乎没有文件系统允许超过 255 个字符。

您唯一的机会是编写一个程序来提取文件并缩短太长的文件名。Java 至少应该能够打开存档(尝试jar -tvf列出内容;如果可行,截断也应该可行)。

于 2013-11-13T15:36:16.410 回答