La respuesta parece ser "no" ... y "sí". Parece que no hay forma real de saber si un archivo está abierto para escritura por otra aplicación. Por lo tanto, la lectura de dicho archivo solo progresará hasta que se agote el contenido. Tomé el consejo de Mike y escribí un código de prueba:
Writer.java escribe una cadena en un archivo y luego espera a que el usuario presione enter antes de escribir otra línea en el archivo. La idea es que se pueda iniciar, luego se puede comenzar a leer un lector para ver cómo funciona el archivo "parcial". El lector que escribí está en 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);
}
}
No hay garantías de que este código es la mejor práctica.
Esto deja la opción sugerida por Mike de verificar periódicamente si hay nuevos datos para leer del archivo. Esto requiere la intervención del usuario para cerrar el lector de archivos cuando se determina que la lectura se ha completado. O bien, el lector debe conocer el contenido del archivo y ser capaz de determinar y finalizar la condición de escritura. Si el contenido fuera XML, el final del documento podría usarse para señalar esto.
bueno, ya que estoy frente a un escenario similar que estaba redacción si se ha encontrado una solución mejor que la aceptada? –
Sé que esta es una vieja pregunta, pero por el bien de los lectores en el futuro, ¿puede ampliar un poco más su caso de uso? Sin tener más información, uno se pregunta si tal vez está resolviendo el problema equivocado. – user359996
Usa una base de datos. Estos escenarios de "leer un archivo mientras se está escribiendo" terminan en lágrimas. – EJP