web-dev-qa-db-ja.com

アプリはどのようにJAR内のファイルを読み書きに使用できますか?

データを.jarファイル内のファイルに保存して、もう一度読み取る必要があります。

私はClass.getResourceAsStream()メソッドを使用できることを知っていますが、それはInputStreamを返しますread fromです。しかし、私はwrite。への方法を探します

.jarファイル内のファイルにデータを保存し、再度読み取る必要があります

いいえ、必要ありません。

代わりに、Jar内に「デフォルト」ファイルを保存します。変更されている場合は、変更されたファイルを別の場所に保管してください。一般的な場所の1つは、user.homeのサブディレクトリです。ファイルを確認するときは、最初にファイルシステム上の変更されたファイルの存在を確認し、存在しない場合はデフォルトファイルをロードします。


一般的に、戦略よりも目標を説明する方が良いことに注意してください。 'Jarに変更されたファイルを保存する'は戦略ですが、 '実行間で設定を保存する'が目的かもしれません。

関連:XY問題とは/

95
Andrew Thompson

これは実際にはサポートされていません。原則として、jarファイルを操作できますが、新しいコンテンツが正しくロードされる保証はありません。ビルドツールでjarファイルを管理し、プログラム自体が管理する永続ストレージ用に別のものを選択します。ファイルのように。

3
Vance Maverick

ロードされたjarファイルを安全に変更できる可能性はほとんどありません。使用中に変更することはお勧めできません。

これを行う場合は、プレーンファイルシステムディレクトリを使用し、そこからファイルを追加/削除します。これでも期待どおりに機能しない可能性があります。

2
Peter Lawrey

_Java.util.jar_(または実際には_Java.util.Zip_)パッケージを使用して、任意のjarファイルを操作できます。 jar内のファイルは圧縮されるため、これはデータを格納するための最もtime効率的な方法ではありません。

おそらく別の場所にディレクトリを使用する必要があります(例:System.getProperty("user.home") + "/.myProgram")または_Java.util.prefs_を参照してください。

2
OrangeDog

Class.getResource()はURLを返します。理論的には、このURLを使用してInputStreamおよびOutputStreamを作成できます。しかし、ほとんどの場合、生成されたJARは読み取り専用ファイル(またはアーカイブ)です。そのため、アプリケーションを使用しようとするとトリップする可能性があります。

1
Binaek Sarkar