Puoi utilizzare questa come base, però devi lavorarci sopra:
Codice PHP:
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Main
{
public static void main(String[] args) throws InterruptedException
{
File file = new File("log.txt");
Thread w = new Thread(new Writer(file));
Thread r = new Thread(new Reader(file));
w.start();
r.start();
w.join();
r.join();
}
}
class Writer implements Runnable
{
private File _file;
public Writer(File file)
{
_file = file;
}
public void run()
{
try
{
for(int i = 0; i < 100; i++)
{
Thread.sleep(5000);
String line = "Line_" + String.valueOf(i);
System.out.println("[T1] Writing " + line + "...");
FileWriter fw = new FileWriter(_file, true);
fw.write(line + "\n");
fw.flush();
fw.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
class Reader implements Runnable
{
private File _file;
private long _lastMod;
private long _toSkip = 0;
public Reader(File file)
{
_file = file;
if(_file.exists())
{
_lastMod = _file.lastModified();
}
else
{
_lastMod = -1;
}
}
public void run()
{
try
{
while(true)
{
if(_file.exists())
{
long lastMod = _file.lastModified();
if(lastMod != _lastMod)
{
System.out.println("[T2] Change detected");
FileReader r = new FileReader(_file);
r.skip(_toSkip);
char[] buff = new char[1024];
int n = -1;
while( (n = r.read(buff)) != -1)
{
System.out.print("[T2] " + new String(buff, 0, n) );
_toSkip += n;
}
r.close();
_lastMod = lastMod;
}
}
}
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
}
Il primo thread "tocca" e scrive su file. Il secondo controlla la data di ultima modifica, skippa i caratteri già letti e legge fino alla fine del file.