Originariamente inviato da citrus
devo scrivere un programma che verifica la presenza di un file e che, se non lo trova subito, continua a verificarne la presenza per un dato tempo (il timeout è definito dall'utente).
Ecco una possibile soluzione:
codice:
import java.io.File;
public class WaitForFile
{
private File f;
public WaitForFile (File f)
{
this.f = f;
}
public boolean waitUntilExists (long timeout)
throws InterruptedException
{
final Object monitor = new Object ();
synchronized (monitor)
{
Runnable r = new Runnable ()
{
public void run ()
{
try
{
while (true)
{
if (f.exists ())
break;
Thread.sleep (50);
}
}
catch (InterruptedException e) { }
synchronized (monitor)
{
monitor.notify ();
}
}
};
Thread t = new Thread (r);
t.start ();
try {
monitor.wait (timeout);
} finally {
t.interrupt ();
}
}
return f.exists ();
}
}
Da usare così:
codice:
WaitForFile wff = new WaitForFile (new File ("nomefile"));
try
{
boolean exists = wff.waitUntilExists (8000); // 8 secondi di timeout
System.out.println (exists ? "esiste" : "non esiste");
}
catch (Exception e)
{
System.out.println (e);
}
Non ho certo la pretesa di dire che è perfetto ... anzi, io stesso non sono sicuro al 100% della correttezza di quello che ho scritto. Se qualcuno più esperto sa dirmi se è valido o meno, ringrazio.