いいえ、canWrite はこの目的には適していません。通常、別のプロセスが書き込み中であっても、ファイルは書き込み可能です。
ロックを調整するには、より高いレベルのプロトコルが必要です。このコードを単一のプラットフォームで使用する場合は、 NIO の FileLock 機能を使用できる場合があります。ただし、ドキュメンテーションを注意深く読んでください。多くのプラットフォームでは、ロックは単なるアドバイスであることに注意してください。
もう 1 つの方法は、プロセスが認識できない名前で 1 つのプロセスにファイルを書き込み、書き込みが完了したときにファイルの名前を認識可能な名前に変更することです。ほとんどのプラットフォームでは、ソースとデスティネーションが同じファイル システム ボリュームである場合、名前変更操作はアトミックです。名前の変更では、別のファイル拡張子が使用される場合や、ファイルをあるディレクトリから別のディレクトリ (同じボリューム上) に移動する場合もあります。
この場合、XML のみを扱っているため、終了タグを探すことはできますが、絶対確実というわけではありません。最終的なマークアップの後にコメントがある場合、またはライターが有効な XML を記述していない場合はどうなるでしょうか?
EOF を探すことはできません。ライターがファイルを開いたばかりで、まだ何も書き込んでいない場合でも、常に EOF が発生します。そうでない場合、最も簡単な方法は、ファイルが表示されるとすぐにリーダーが解析を開始できるようにすることです。ライターがファイルを閉じるまで、単純にブロックされます。しかし、ファイルシステムはこのようには機能しません。何らかのプロセスが現在ファイルを移動している場合でも、すべてのファイルには終わりがあります。