0

我想在 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**

带有粗体字符的文本是我要编辑的文本文件名

和带有斜体格式的文本是我的 .jar 文件

现在我如何编辑这个 cmudict04.dict 文件,该文件位于运行时与 java 应用程序的 WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar\dict\ 目录中。

我想要带有我编辑过的更新文件的 jar 文件。

请问你能给我任何帮助吗?

提前谢谢你。

4

3 回答 3

1

您不能编辑包含在 Jar 文件中的文件并将其保存在 Jar 文件中......如果没有,首先提取文件,更新它并通过将旧 Jar 的内容复制到新 Jar 来创建新 Jar一,删除旧的并在其位置重命名新的...

我的建议是找到更好的解决方案

于 2012-08-30T11:13:06.433 回答
1

我建议使用java.util.zip。使用这些类,您可以读取和写入存档中的文件。但不能保证修改内容,因为它可能会被缓存。

示例教程

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

于 2012-08-30T11:04:35.157 回答
0

我已成功编辑 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();
      }

    }
于 2012-09-03T05:04:40.760 回答