6

入力ストリームと出力ストリームにこの奇妙なことがありますが、これは理解できません。次のように、inputstream を使用してリソースからプロパティ ファイルを読み取ります。

Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream( "/resources/SQL.properties" );
rop.load(in);
return prop;

それは私のファイルを見つけて、それを正常に赤くします。私はこのように変更された設定を書き込もうとします:

prop.store(new FileOutputStream( "/resources/SQL.properties" ), null);

そして、保存から奇妙なエラーが発生しました:

java.io.FileNotFoundException: \resources\SQL.properties (The system cannot find the path specified)

では、なぜプロパティへのパスが変更されるのでしょうか? これを修正する方法は?WindowsでNetbeansを使用しています

4

3 に答える 3

6

問題は、ファイルシステムにファイルを直接作成しgetResourceAsStream()ながら、指定したパスをクラスパスに対して相対的に解決していることです。new FileOutputStream()パスの開始点が異なります。

一般に、リソースがロードされたソースの場所に書き戻すことはできません。ファイルシステムにリソースがまったく存在しない可能性があるためです。たとえば、jar ファイルにある可能性があり、JVM は jar ファイルを更新しません。

于 2012-05-08T04:51:19.067 に答える
3

効くかも

try
{
java.net.URL url = this.getClass().getResource("/resources/SQL.properties");

java.io.FileInputStream pin = new java.io.FileInputStream(url.getFile());

java.util.Properties props = new java.util.Properties();

props.load(pin);
}
catch(Exception ex)
{
ex.printStackTrace();
}

以下のURLを確認してください

getResourceAsStream() と FileInputStream

于 2012-05-08T05:04:07.630 に答える
1

この質問を参照してください:クラスパスにファイルを保存するにはどうすればよいですか?

そして、この答えhttps://stackoverflow.com/a/4714719/239168

要約すると、クラスパスから読み取ったファイルを簡単に保存できるとは限りません (例: jar 内のファイル)。

ただし、実際にクラスパス上の単なるファイルである場合、上記の回答には優れたアプローチがあります

于 2012-05-08T05:12:14.587 に答える