文件通常重命名我使用一個文件:的Java:重命名裏面一個.jar
File oldFile = new File("file path");
oldFile.renameTo(new File("file path with new name"));
但是如果我要重命名的文件是一個可執行的.jar裏面是有辦法,從將其重命名那裏?
文件通常重命名我使用一個文件:的Java:重命名裏面一個.jar
File oldFile = new File("file path");
oldFile.renameTo(new File("file path with new name"));
但是如果我要重命名的文件是一個可執行的.jar裏面是有辦法,從將其重命名那裏?
不,你不能這樣做,除非你提取JAR文件,重命名文件並重新打包它。
你不能這樣做。因爲
A jar file is not itself a file system and the contents cannot be accessed
using File objects.
爲此 拳,你必須提取該文件,然後重命名要重命名的文件。
您可以一次複製一個jar,一個條目,重命名您想要更改的條目。這可能比開箱,重命名和重新打包更高效。
如果不更改對該名稱的所有引用,則不能重命名類文件。在不重新編譯所有代碼的情況下,可以使用像ObjectWebs ASM這樣的庫來檢查字節代碼並更改對該類的引用。如果該類在字符串中被引用,那麼您也可以更改該字符串。
是的,你可以重命名一個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();
}
}
這聽起來很瘋狂。你有什麼背景知道爲什麼你需要這樣做? – 2012-07-26 11:55:34
我有點困惑,你的意思是在相同的.jar文件中重命名.jar文件? – 2012-07-26 11:57:57
有鑑於此,WinZip和WinRar能夠在不提取/重新壓縮的情況下執行此操作,因此從技術上講我相信它是可行的。標準API(ZipFile,ZipEntry)似乎不支持它。 – aioobe 2012-07-26 12:01:04