Ecco una possibile soluzione: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).
Da usare così: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 (); } }
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.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); }

Rispondi quotando