2011-07-27 21 views
2

javaを閉じる前に別のハンドラによって更新されているファイルの内容を読み取る方法はありますか?Java - 同時にファイルを読み書きするには?

+2

これは単一のJVM内にありますか?あなたがこれを行う必要がある根本的な理由は何ですか?あなたは何の問題を解決していますか? –

+2

2つのハンドラの間に直接ストリームを確立するだけではどうですか? – TC1

+1

は、ThorbjørnRavn Andersenと他の人のコメントに同意しました。実際の根本的な問題について話し合う必要があります。ソリューションの考え方ではなく、そのソリューションの実装方法を尋ねます。あなたが尋ねたやり方を通らずに、最終的に達成したいことをやり遂げる方法はすでにあります。私はプロセス間通信をしたいと思っていますが、私はちょうど野生の推測をしています。 – Chii

答えて

2

理論的には非常に簡単ですが、ファイルはこのようにデータを交換するようには設計されておらず、要件に応じて正しく取得するのは難しい場合があります。これが一般的な解決法がない理由です。

他のプロセスが書き込みを行っているときにファイルを読みたい場合、書き込みスレッドが終了していなくても、読み取りスレッドはEOFを参照します。ファイルを再度開いて、ファイルが最後に読み込まれた場所にスキップして続行する必要があります。書き込みスレッドは、書き込み中のファイルをロールして、読み取りでこれを検出して処理する必要があることを意味します。

具体的に何をしたいですか?

+0

このようにデータを交換するようには設計されていませんか? SQLiteは異なっているようです;-)わかりました、私はそれをalittle .. –

3

オペレーティングシステムによって異なります。

伝統的に、POSIX-yオペレーティングシステム(Linux、Solaris、...)は、別々のプロセスであっても読み取りと書き込みの両方でファイルを開くことに全く問題ありませんからのおよび/または書き込まれる)。

Windowsでは、より一般的なアプローチは、ファイルを排他的に開くことです(Windows が非排他的なファイルアクセスをサポートしますが、アプリケーションではほとんど使用されません)。

Javaには、ファイルへのアクセス方法を指定する方法がないため、プラットフォームのデフォルトが使用されます(Linux/Solarisでは共有アクセス、Windowsでは排他アクセス)。

* NIOとJava 7の新しいNIOではこれが間違っているかもしれませんが、私は大きなNIOのエキスパートではありません。

関連する問題