2012-04-13 7 views
0

私のプログラムにはリソースからファイルを読み書きする機能があります。この機能をスムーズにテストしました。 たとえば、何かをファイルに書き込んだり、再起動して再度読み込んだりすると、そのデータを再度読み取ることができます。Java:配備後にリソースにファイルを保存するときのエラー

しかし、jarファイルにエクスポートした後、ファイルを書き込むときに問題が発生しました。ここでは、ファイル書き込みに私のコードされています

URL resourceUrl = getClass().getResource("/resource/data.sav"); 
File file = new File(resourceUrl.toURI()); 
FileOutputStream output = new FileOutputStream(file); 
ObjectOutputStream writer = new ObjectOutputStream(output); 

このコードの実行は、私は、コマンドプロンプトで通知エラーが発生しました: my error だから、私のデータは保存できません。 (私はアプリを再起動しても何も変わっていないので、私はそれを知っています!!!)

私はこの問題を解決するのを手伝ってください。

ありがとう:)

+0

代わりにそのスタックトレースをコピーしてテキストとして貼り付けできませんでしたか? – adarshr

+0

私は主な問題は、開発では実際のファイルに書いているのに対し、「プロダクション」ではすべてがjar'edで、あなたのressourcesは書き込みできないjarファイルです。 –

答えて

2

このようにjarファイルにファイルを書き込むことはできません。 getResource()から取得したURIはfile:/// URIではなく、java.io.File'sコンストラクタに渡すことはできません。 zipファイルを書き込む唯一の方法は、この目的のために設計されたjava.util.zipのクラスを使用することです。これらのクラスは、jarファイル全体を記述し、その内部の単一のファイルにデータをストリームするのではなく、実際のインストールでは、ユーザーは、とにかくjarファイルに書き込む権限を持っていないこともあります。

ファイルシステム上の実際のファイルにデータを保存する必要があります。十分な場合は、環境設定APIを使用してデータを保存する必要があります。

+0

'java.util.zip'についてもっと教えてください。ファイルを解凍してもう一度書き込んだり解凍したりすることを意味しますか? – hqt

+0

まあ、私が本当に意味していたのは、あなたがjarファイルを完全に更新するという考えを放棄したということでした。私が言ったように、あなたのプログラムはそうするための適切な権限を持っていないかもしれません。他の場所のデータを保存してください! –

-2

jarファイルから読み込むには、ファイルを入力ストリームとして読み書きする必要があります。

public static String getValue(String key) 
    { 
     String _value = null; 
     try 
     { 
      InputStream loadedFile = ConfigReader.class.getClassLoader().getResourceAsStream(configFileName); 
      if(loadedFile == null) throw new Exception("Error: Could not load the file as a stream!"); 
      props.load(loadedFile); 
     } 
     catch(Exception ex){ 
      try { 
       System.out.println(ex.getMessage()); 
       props.load(new FileInputStream(configFileName)); 
      } catch (FileNotFoundException e) { 
       ExceptionWriter.LogException(e); 
      } catch (IOException e) { 
       ExceptionWriter.LogException(e); 
      } 
     } 
     _value = props.getProperty(key); 
     if(_value == null || _value.equals("")) System.out.println("Null value supplied for key: "+key); 
     return _value; 
    } 
+0

getResourceAsStream()はファイルの読み込みに役立ちますが、私は同意しますが、彼はファイルに書き込むことができないため、とにかく全く異なるアプローチが必要です –

関連する問題