簡體   English   中英

編輯包含在jar文件中的任何文件

[英]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 。使用這些類,您可以讀取和寫入存檔中的文件。但是不能保證修改內容,因為它可能被緩存。

示例教程

http://www.javaworld.com/community/node/8362

您無法編輯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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM