2012-04-13 10 views
1

私は小道具をロードし、その.jarファイルにバンドルされたとき、私は通常、NetBeansでその罰金を、これを実行すると、それをファイルのロードが

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); 

を保存していて

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

スロー

今私は

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

を使用する場合、私はフィルを読むことができます私はのように.toURI() を使用しない限り、E、しかし、私は、ファイルを保存することはできません - 私はtoURIを(使用する場合>Storing changes in .properties file that has been read via getClass().getResourceAsStream

)と私は(jarファイル)、それを実行すると、それはURI is not hierarchical

を言って叫ぶだろう

と私がgetResourceAsStreamを使用した場合、ファイルを保存できませんでした。

どうすればいいですか?クラスが含まれているよう プロパティファイルには、同じパッケージ内にある

+0

:プログラムの必要性を行う理由jarファイルを変更するには?私はあなたが要件/デザインを再訪する必要があると思います。 jarファイルが書き込み可能でない場合を考えてみましょう。 – Jayan

+0

@Jayan私はいくつかのパラメータがユーザー名/パスワードなどのようにユーザーによって設定されているデスクトップアプリケーションを作成しようとしています。ちょっと、私はプロパティファイルbecozを使いたいと思っています。 – cypronmaya

+0

@ cypronmaya:jarのプロパティには、ある種のデフォルトを設定することができます。変更されたコンテンツを$ {user.home}に保存します。 – Jayan

答えて

4

あなただけ負荷にプロパティが必要な場合は、すべてでFileを使用すべきではない - 。あなたはgetResourceAsStreamを使用する必要があります。

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

あなたが本当にの両方が必要な場合は、変更を保存する必要があるときに初めて作成されたファイルを持っ検討する必要があります:ロードするとき、それは存在だ場合、ファイルを使用しますが、jarファイルにバージョンを使用しますさもないと。

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

+0

あなたは最後の部分を '精緻にすることができたらどうでしょうか?本当に両方が必要な場合.......' – cypronmaya

+0

@cypronmaya:あなたは何を理解していませんか?間違いなく変更を保存する必要はありますか? jarファイルの書き換えを開始したくないと仮定した場合、新しいプロパティファイルを保存できる適切な場所がありますか? –

+0

あなたが変更を保存するために初めて変更を保存する必要があるときに作成されるファイルを持つことを検討したいと思っていた部分は?とにかくそれをすることができませんでした。はい、私はプログラムが終了するまで、少なくとも一時ファイルに変更を保存する必要があります。 – cypronmaya

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は、すべてのマシン上のすべての時間を動作しないことに注意してください、それは毎回の隣に動作するはずです。)cypronmaya @

+1

* "user.homeはすべてのプラットフォームで動作しません。"どのようにして 'うまくいかないのですか'?どのプラットフォームですか? –

+0

@AndrewThompson私はそれが既に働いていないのを見ました。しかし、ここでは「プラットフォーム」は間違った言葉です(私はそれを編集します)。この質問を例として見てください:http://stackoverflow.com/questions/1503284/java-system-getpropertyuser-home-returns –

関連する問題