[英]edit any file which is wrapped in the jar file
我想在eclipse中使用我的java代碼實現以下內容。
我需要編輯jar文件目錄下的.dict文件。
我的目錄結構就像
C:\\Users\\bhavik.kama\\Desktop\\Sphinx\\sphinx4-1.0beta6-bin\\sphinx4-1.0beta6\\modified_jar_dict\\*WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar*\\dict\\**cmudict04.dict**
帶有粗體字符的文本是我要編輯的文本文件名
和italic foramt的文本是我的.jar文件
現在我如何編輯這個cmudict04.dict文件,它在運行時使用java應用程序駐留在WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar \\ dict \\目錄中。
我想要jar文件與我已編輯的更新文件。
請你幫我一下嗎?
事先讓你好意思。
我建議使用java.util.zip 。使用這些類,您可以讀取和寫入存檔中的文件。但是不能保證修改內容,因為它可能被緩存。
示例教程
您無法編輯Jar文件中包含的文件並將其保存在Jar文件中...沒有,首先提取文件,更新文件並通過將舊文件的內容復制到新文件來創建新的文件夾一,刪除舊的並重新命名新的...
我的建議是找到一個更好的解決方案
我已經成功編輯了jar文件並將其包裝回原樣......使用以下代碼
public void run() throws IOException
{
Manifest manifest = new Manifest();
manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
// JarOutputStream target = new JarOutputStream(new FileOutputStream("E:\\hiren1\\WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar"), manifest);
// add(new File("E:\\hiren1\\WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/"), target);
JarOutputStream target = new JarOutputStream(new FileOutputStream("C:\\Users\\bhavik.kama\\Desktop\\Sphinx\\sphinx4-1.0beta6-bin\\sphinx4-1.0beta6\\modified_jar_dict\\WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar"), manifest);
add(new File("C:\\Users\\bhavik.kama\\Desktop\\Sphinx\\sphinx4-1.0beta6-bin\\sphinx4-1.0beta6\\modified_jar_dict\\WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/"), target);
target.close();
}
private void add(File source, JarOutputStream target) throws IOException
{
BufferedInputStream in = null;
try
{
if (source.isDirectory())
{
//String name = source.getPath().replace("\\", "/");
if(isFirst)
{
firstDir = source.getParent() + "\\";
isFirst = false;
}
String name = source.getPath();
name = name.replace(firstDir,"");
if (!name.isEmpty())
{
if (!name.endsWith("/"))
name += "/";
JarEntry entry = new JarEntry(name);
entry.setTime(source.lastModified());
target.putNextEntry(entry);
target.closeEntry();
}
for (File nestedFile: source.listFiles())
add(nestedFile, target);
return;
}
String name = source.getPath();
name = name.replace(firstDir,"").replace("\\", "/");
//JarEntry entry = new JarEntry(source.getPath().replace("\\", "/"));
JarEntry entry = new JarEntry(name);
//JarEntry entry = new JarEntry(source.getName());
entry.setTime(source.lastModified());
target.putNextEntry(entry);
in = new BufferedInputStream(new FileInputStream(source));
byte[] buffer = new byte[1024];
while (true)
{
int count = in.read(buffer);
if (count == -1)
break;
target.write(buffer, 0, count);
}
target.closeEntry();
}
finally
{
if (in != null)
in.close();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.