1

通常要重命名我使用的文件:

File oldFile = new File("file path");
oldFile.renameTo(new File("file path with new name"));

但是,如果我要重命名的文件位于 .jar 可执行文件中,有没有办法从那里重命名它?

4

4 回答 4

2

你不能做这个。因为

A jar file is not itself a file system and the contents cannot be accessed
using File objects.

要做到这一点,您必须提取文件,然后重命名您要重命名的文件。

于 2012-07-26T11:57:57.230 回答
2

不,除非您提取 JAR 文件、重命名文件并重新打包,否则您不能这样做。

于 2012-07-26T11:55:18.463 回答
1

您可以复制一个罐子,一次一个条目,重命名您要更改的条目。这可能比解包、重命名和重新打包更有效。

如果不更改对该名称的所有引用,则无法重命名类文件。无需重新编译所有代码,您就可以使用 ObjectWebs ASM 之类的库来检查字节码并更改对该类的引用。如果在字符串中引用了该类,您可能还想更改该字符串。

于 2012-07-26T12:15:32.457 回答
0

是的,您可以重命名 jar 中的文件。例如,您可以使用JarEntryFilter

像这样:

...
import org.springframework.boot.loader.jar.JarEntryData;
import org.springframework.boot.loader.jar.JarEntryFilter;
import org.springframework.boot.loader.jar.JarFile;
import org.springframework.boot.loader.tools.JarWriter;
import org.springframework.boot.loader.util.AsciiBytes;
...
    JarWriter writer = new JarWriter(destination);
    try {
        JarFile filteredJarFile = sourceJar.getFilteredJarFile(new JarEntryFilter() {
            @Override
            public AsciiBytes apply(AsciiBytes name, JarEntryData entryData) {
                String string = name.toString();
                String exp = "^a.*";
                if (string.matches(exp)) {
                    string = string.replaceFirst(exp, "replaced");
                    return new AsciiBytes(string);
                }
                return name;
            }
        });
        writer.writeEntries(filteredJarFile);
    } finally {
        try {
            writer.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
于 2016-04-21T16:03:59.477 回答