1

プロップを読み込んで保存しています

File propfile=new File(getClass().getResource("credentials.properties").toURI());
                prop.load(new FileInputStream(propfile));
            prop.setProperty("a", username);
            prop.setProperty("c", password);
            prop.setProperty("b", pbKey);
            prop.store(new FileOutputStream(propfile), null);

通常、これを netbeans で実行すると問題ありませんが、.jar ファイルにバンドルするとスローされます

Caused by: java.lang.IllegalArgumentException: URI is not hierarchical
    at java.io.File.(Unknown Source)

今私が使うとき

 getClass().getResourceAsStream("credentials.properties");

私はファイルを読むことができますが、.toURI() as inを使用しない限りファイルを保存できません-> getClass().getResourceAsStream経由で読み込まれた.propertiesファイルに変更を保存する

そのため、toURI() を使用し、それ (jar ファイル) を実行すると、 URI is not hierarchical

を使用するgetResourceAsStreamと、ファイルを保存できませんでした

私は何をすべきか?プロパティ ファイルは、クラスと同じパッケージにあります。

4

2 に答える 2

4

プロパティのみをロードする必要がある場合はFile、まったく使用しないでください。使用する必要がありますgetResourceAsStream

プロパティを再度保存する必要がある場合、それらを jar ファイルに簡単に含めることはできません。保存するたびに jar ファイルを再構築する必要があります。

本当に両方が必要な場合は、最初に変更を保存する必要があるときにファイルを作成することを検討することをお勧めします。読み込み時に、ファイルが存在する場合はそのファイルを使用し、それ以外の場合は jar ファイル内のバージョンを使用します。

Preferences編集: デスクトップ アプリケーションを構築していて、これらが基本的にユーザー設定である場合は、 APIを調べる必要があります。また、パスワードを保存している場合は十分注意してください...できればそうしないでください。

于 2012-04-13T07:43:58.673 に答える
1

試す:

File userFile = new File(System.getProperty("user.home"), "myProgram.properties");
if(userFile.exists()) {
    prop.load(new FileInputStream(userFile));
} else {
    prop.load(getClass().getResourceAsStream("credentials.properties"));
}

prop.setProperty("a", username);
prop.setProperty("c", password);
prop.setProperty("b", pbKey);
prop.store(new FileOutputStream(userFile), null);

( user.home は、すべてのマシンで毎回機能するとは限りませんが、常に次のように機能するはずです。)

于 2012-04-13T07:44:54.003 に答える