2012-01-14 11 views
0

私のjarファイル内の.xmlファイルへの書き込みに問題があります。 Netbeans IDEの内部で次のコードを使用すると、エラーは発生せず、ファイルには正常に書き込まれます。jarファイル内のファイルへの書き込み

public void saveSettings(){ 
    Properties prop = new Properties(); 
    FileOutputStream out; 
    try { 
     File file = new File(Duct.class.getResource("/Settings.xml").toURI()); 
     out = new FileOutputStream(file); 
     prop.setProperty("LAST_FILE", getLastFile()); 
     try { 
      prop.storeToXML(out,null); 
     } catch (Exception e) { 
      JOptionPane.showMessageDialog(null, e.toString()); 
     } 
     try { 
      out.close(); 
     } catch (Exception e) { 
      JOptionPane.showMessageDialog(null, e.toString()); 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e.toString()); 
    } 
} 

私はjarファイルを実行するときしかし、私はというエラーを取得:

IllegalArguementException: uri is not hierachal 

誰もが、それは私がNetBeansでそれを実行する際の作業が、私は、実行時に働いていない理由のアイデアを持っています瓶。誰にも問題の解決策がありますか?

+3

でなければなりません。 'java.util.zip.ZipFile'を見てください。 NetBeansでは、ほとんどの場合、ファイルシステムからアプリケーションを実行しますが、JARファイル内では実行されません。 – bestsss

+0

@bestsss:設定を保存するための解決策は何でしょうか? jarファイルとは関係のない別の場所にファイルを置きますか? –

+0

@MichaelRentmeister ['Preferences' API](http://docs.oracle.com/javase/6/docs/api/java/util/prefs/Preferences.html)を使用しますか? –

答えて

0

デフォルトのクラスローダーでは、クラスパスが静的であることが必要であるため(大量にキャッシュできるため)、この方法は機能しません。

適切な場所に置くことができる場合は、ファイルシステムにSettings.xmlを配置できます。これはベンダーやプラットフォームに固有の可能性が高いですが、実行することができます。

+3

'user.home'は常に利用可能で、ベンダーに依存しません。また、書き込み可能でなければなりません。 – bestsss

+0

サーブレットコード、またはサービスとして動作しているものはありません。 –

+0

コードはスイングを使用し、サーブレットコードは "user.home"を使用できますが、署名されていないアプレットは使用できません。 Javaには常にセキュリティ制限が付いていますが、アプリケーションを自分で展開する場合はそれをはるかに超えています。 – bestsss

0

Settings.xmlの場所をclasspathに追加します。

0

私もこの例外を抱えていました。しかし、最終的に解決策を見つけました。

あなたが.toURIを(使用)それは

D:/folderName/folderName/Settings.xml 

のようないくつかのことを返すので、あなたは、このメソッドある、getPathを(呼び出す避けるために例外 "URIは階層ではありません"

を取得)戻り値のURIには、

などが返されます。これは現在階層化されています。あなたのケースでは

、あなたのコード内の5番目の行は、単にあなたがそれらを再構築するO/Wジップ/ jarファイル内の書き込みカントそれを置くために

File file = new File(Duct.class.getResource("/Settings.xml").toURI().getPath()); 
関連する問題