1

重複の可能性:
Javaプログラムは、.jar内のファイルを読み取りおよび書き込みにどのように使用できますか?

私はゲームを作成中です。すべてを実行可能なjarファイルから実行したいので、すべてのリソース(画像とテキストファイル)はjarファイル内にあります。

私がこれで抱えている問題は、jar内のファイルを処理することが非常に難しいことです。

私はeclipseを使用しています。これは、eclipseから実行するとファイルが検出されるため、トリックを実行することがありますが、エクスポートすると検出されません。

基本的に、いくつかのことを露にする適切な方法を知りたいだけです。

  1. 画像を読み込める必要があります(どういうわけか、私はそれを使っています。私はそれをいじくり回して偶然にやったので、それがどのように機能するのかわかりません)
  2. 私はテキストファイルから読み取ることができる必要があります(これもまた、偶然と何時間もの推測で機能しています)。
  3. jarファイルに存在しているテキストファイルに書き込める必要があります。これは私がそれをすべて間違っていると私に思わせているものです。私がやりたいのは、特定の設定を保存して次のロードで機能するようにすることだけです。ファイルへの書き込み方法がわかりません。

Eclipse(Indigo)で、「resources」という名前のフォルダーを作成し、ソースフォルダーとしてマークしました。すべての画像とテキストファイルをそこに置きます。私はこのような画像を読みました:

public static Image ammo = new ImageIcon(TankMazeGame.class.getResource("ammo.png")).getImage();

私はこのようなテキストファイルを読みます:

InputStream is = TankMazeRunner.class.getClassLoader().getResourceAsStream("Settings.txt");
Scanner settingsReader = new Scanner(new InputStreamReader(is));

私はこのように設定ファイルに書き込んでいますが、実際には機能していないので、それが私が助けを必要としていることです。

File settingsFile = new File(DisplayMenu.class.getClassLoader().getResource("Settings.txt").getFile());
try {
    OutputStream os = new FileOutputStream(settingsFile, true);
    PrintWriter pw = new PrintWriter(os, true);
    pw.write("SIZE: " + TankMazeRunner.WIDTH + "\n");
    os.flush();
    pw.close(); 
} catch (Exception e2) {
    System.out.println("Error");
}

おそらく私のコードからわかるように、私は迷子になっています。

4

2 に答える 2

4

この質問に出くわした他の人のために。

使用しているOSに制約を課すことができなければ、これを行うことはできません。それでも、これを行うことができない場合があります。

注意すべきいくつかの制約があります:

  • Microsoft Windowsは、独自の読み取り/書き込みロックの構文を実装しています。読み取りハンドルが開いている間は、ファイルに書き込むことはできません。これはクラスパス上のファイルであるため、JVMは読み取りハンドルを開きます。したがって、Javaでは不可能です(一時的なプロセスをフォークし、自殺し、一時的なプロセスを書き換えて再起動する場合を除きます...これは醜いです)とにかくアンチウイルスは一時的なプロセスを停止する可能性があります)

  • ほとんどのUNIXOS実装には問題はありませんが、JVMはJARファイル内にオフセットをキャッシュしているため、終了してクラスをロードしようとするとすぐにプログラムがクラッシュします。

  • Windowsユーザーのみが、実行可能ファイルへの書き込みアクセスをロックダウンするためにファイル権限を使用しない傾向があるため、jarへの書き込みアクセス権があると想定することは無効です。

2番目のポイントは、すべてのOS implsの水中で死んでいることです(フォークと一緒に暮らすことができ、フォークがとにかく多くの危険な仮定をしている場合を除く)

別のファイルに書き込んで完了です。

于 2013-01-20T09:40:58.057 に答える
1

JARの外部のよく知られた場所に設定を書き込むのはどうですか?

設定を保存する代わりに、次のいずれかの方法を検討してください。

于 2013-01-20T06:35:14.360 に答える