答えは「いいえ」…そして「はい」のようです。ファイルが別のアプリケーションによって書き込み用に開かれているかどうかを知る実際の方法はないようです。したがって、そのようなファイルからの読み取りは、コンテンツが使い果たされるまで進行します。私は Mike のアドバイスを受けて、いくつかのテスト コードを書きました。
Writer.java は文字列をファイルに書き込み、ユーザーが Enter キーを押すのを待ってから、別の行をファイルに書き込みます。起動できるという考えは、リーダーが起動して、「部分的な」ファイルにどのように対処するかを確認できるようにすることです。私が書いたリーダーは Reader.java にあります。
Writer.java
public class Writer extends Object
{
Writer () {
}
public static String[] strings =
{
"Hello World",
"Goodbye World"
};
public static void main(String[] args)
throws java.io.IOException {
java.io.PrintWriter pw =
new java.io.PrintWriter(new java.io.FileOutputStream("out.txt"), true);
for(String s : strings) {
pw.println(s);
System.in.read();
}
pw.close();
}
}
Reader.java
public class Reader extends Object
{
Reader () {
}
public static void main(String[] args)
throws Exception {
java.io.FileInputStream in = new java.io.FileInputStream("out.txt");
java.nio.channels.FileChannel fc = in.getChannel();
java.nio.ByteBuffer bb = java.nio.ByteBuffer.allocate(10);
while(fc.read(bb) >= 0) {
bb.flip();
while(bb.hasRemaining()) {
System.out.println((char)bb.get());
}
bb.clear();
}
System.exit(0);
}
}
このコードがベスト プラクティスであることを保証するものではありません。
これにより、ファイルから読み取る新しいデータがあるかどうかを定期的に確認するという、Mike が提案したオプションが残ります。これにより、読み取りが完了したと判断されたときに、ファイル リーダーを閉じるためにユーザーの介入が必要になります。または、リーダーにファイルの内容を認識させ、書き込み条件の終了を判断できるようにする必要があります。コンテンツが XML の場合、ドキュメントの末尾を使用してこれを通知できます。