• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルロック後の書き込みについて)

ファイルロック後の書き込み問題とその解決方法

このQ&Aのポイント
  • ファイルAをロックしファイルBを読み込み、ファイルAに書き込むプログラムを作成していますが、複数起動するとファイルの書き込みが行われなくなってしまいます。なぜ書き込みが行われなくなってしまうかご教授いただけますか?
  • ロックしたプログラム以外はロックエラーになり、ロックについては正常に動いているように見えます。
  • プログラムを修正して複数起動しても書き込みができるようにする方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • tekebon
  • ベストアンサー率62% (36/58)
回答No.4

#3です 2つ目のプログラムを起動し、FileOutputStreamのオブジェクトを 生成した時点で新規作成してしまっています(ファイルが空) その後でロックのチェックをしているので「ロック中」と判断されます。 したがって1番目のプログラム終了時には2番目のプログラムによって クリアされてしまい、書き込まれていないように見えるようです。 とりあえず原因はコレではないかと思います。 対策は...どうしましょう?(苦笑

sasuke0100
質問者

お礼

なるほど納得しました。 クローズ云々ではなくこのロジック自体に問題有りですね・・・ ファイル存在チェックを入れるか他の関数を調べてみます。 回答ありがとうございました。

その他の回答 (3)

  • tekebon
  • ベストアンサー率62% (36/58)
回答No.3

どのように複数実行しているのでしょうか? 私のところでは普通に動くようです(XP/J2SE5) sleep中に起動するのであればclose()まえなので当然ロック中です。 また、テキストエディタなどで出力ファイルを開いていると テキストエディタがロックしていることも考えられます。

sasuke0100
質問者

補足

このPGMを一つ起動してsleep中にもうひとつ同じPGMを起動しています。 そうすると後で起動したものは想定通りロックエラーになりますが 最初に起動した方はロックして記述してsleepしてクローズしているように見えますが記述がされていませんでした。 ファイルを開いている等は行っていません。 因みに単体起動だと正常に記述されています。 因みに環境はXPの java version "1.6.0_03" Java(TM) SE Runtime Environment (build 1.6.0_03-b05) Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode, sharing) です。

回答No.2

↓が原因では? ---JavaDocより抜粋----------------------------------------------- ファイルロックオブジェクトは最初から有効であり、release メソッドの呼び出し、ロックの獲得に使用したチャネルのクローズ、Java 仮想マシンの終了などによって解放されるまで、その状態を保持します。ロックの有効性は、isValid メソッドを呼び出すことによって確認できます。 ---------------------------------------------------------------- >System.out.println("rock error!!"); ↑は恥ずかしいですよ。

sasuke0100
質問者

お礼

返信ありがとうございます。 ロック違いですね、やっちまいました。 javadoc抜粋については ロックはrelease・クローズ・PGM終了まで保持されるということですよね それは解るのですが2つPGMが起動された場合 ファイル記述がされないのとどう関わってくるのでしょうか?

noname#49664
noname#49664
回答No.1

closeする前に、outChannel.release()でロックを解除していないからでしょう。

sasuke0100
質問者

お礼

返信ありがとうございます。 closeのところを以下のようにしたのですがだめでした。(>_<;) outFileLock.release(); outChannel.close(); output.close(); fis.close(); 何かクローズの仕方が間違っているのでしょうか

関連するQ&A

専門家に質問してみよう