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ファイルです

ここで、Javaアプリケーションを使用して実行時にWSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar \dict\ディレクトリにあるこのcmudict04.dictファイルを編集するにはどうすればよいですか。

編集した更新ファイルを含むjarファイルが必要です。

何か助けてもらえますか?

よろしくお願いします。

4

3 に答える 3

1

java.util.zipを使用することをお勧めします。これらのクラスを使用すると、アーカイブ内のファイルを読み書きできます。ただし、コンテンツがキャッシュされる可能性があるため、コンテンツの変更は保証されません。

サンプルチュートリアル

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

于 2012-08-30T11:04:35.157 に答える
1

Jarファイルに含まれているファイルを編集してJarファイルに保存することはできません...ファイルを最初に抽出し、更新して、古いファイルの内容を新しいJarにコピーして新しいJarを作成する必要があります。 1つは、古いものを削除し、代わりに新しいものの名前を変更する...

私の提案は、より良い解決策を見つけることです

于 2012-08-30T11:13:06.433 に答える
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 に答える