0

デスクトップの簡単なアプリケーションがあります。このアプリケーションには、他のアプリケーションの MyApp.jar と呼ばれる .jar があり、この jar には 1 つのキー (infor.properties) を持つプロパティ ファイルがあります。アプリケーションは、プロパティ ファイルのキーが inputText の文字列である独自の MyApp.jar を生成する必要があるため、que プロパティ ファイルを変更する必要があります。私の問題は、新しい .jar を生成するときに、この jar がプロパティ ファイルを見つけられないことです。これを使用して、infor.properties のコンテンツを取得します。

InputStream in = this.getClass().getClassLoader().getResourceAsStream("infor.properties");
Properties prop = new Properties();
prop.load(in);
in.close();

ZipFile と ZipOutputStream を使用して、すべてのファイルを新しい .jar にコピーし、新しいものを追加します。新しい .jar ファイルの新しい構造は正しいのですが、新しい jar ファイルを実行すると、ファイル infor.properties が見つかりません。誰かが理由を知っていますか?

4

1 に答える 1

1

jar 内のファイルの場所と、クラスパスをどのように指定するかによって異なります。残念ながら、あなたはあなたの構造などについて多くの情報を提供してくれませんでした。そのため、あなたのプロジェクトに適用できるこのサンプルを作成しました:

Testパッケージにクラスがあるとしましょうtestapp(クラスの完全な名前は前にありますtestapp.Test):

package testapp;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Test {

    private static final Logger logger = Logger.getLogger(Test.class.getName());

    public static void main(String[] args) {

            Properties properties = new Properties();
            try {
                properties.load(new FileInputStream("testapp/infor.properties"));
                System.out.println("" + properties.getProperty("a"));
            } catch (IOException e) {
                logger.log(Level.SEVERE, "", e);
            }

    }

}

あなたはあるディレクトリ PROJECT_ROOT にいます。このディレクトリには、上記のコンパイル済みクラスがあります (クラスのフルネームは であるため、ディレクトリ testapp にありますtestapp.Test)。構造は次のようになります。

PROJECT_ROOT
  testapp
    Test.class
    infor.properties

クラスはすでにコンパイルされていることに注意してください (おそらく、その方法を正しく知っていますか?)。作業ディレクトリが PROJECT_ROOT の場合、次を実行できます。

 jar -vcf myjar.jar *

という名前の jar が作成されmyjar.jarます。これで、次のコマンドを使用してjarファイルを実行できます

java -cp myjar.jar testapp.Test

-cp myjar.jarこれは、( を使用して) クラスパスが myjar.jar であることを単純に示しています (JVM は jar のようなディレクトリです)。

Test.java でわかるように、"testapp/infor.properties". 使用するクラスパスには、プロパティファイルへのパスを指定する必要があります。クラスパスは myjar.jar コンテンツのルートです。したがって、testapp/infor.properties.

于 2012-04-27T10:19:45.540 に答える