Ho scoperto che il meccanismo di blocco del file Java è un errore reale poiché non è possibile eseguire la prima regola del blocco: bloccare una chiamata da bloccare! A meno che non mi sbagli: una chiamata a lock() genererà un'eccezione se un'applicazione mantiene già un blocco sul file, che so sarà il caso nella mia applicazione. Ho guardato attraverso alcune risposte qui e purtroppo non sto usando Java 7.Blocco Java FileLock senza eccezioni; in attesa del lucchetto
Qualcuno ha suggerimenti su come avrei potuto gestire in attesa di un blocco di file esclusiva senza mettere me stesso in un ciclo while(true)
:)
EDIT dopo la risposta di Aubin (copia dal commento):
Quello che voglio fare è accedere a un file di grandi dimensioni dopo essere stato copiato in una directory e quindi elaborarlo. Il mio codice è semplice ...
public boolean ifFileReady(File file) {
boolean ready = false;
FileLock lock = null;
FileChannel channel = null;
try {
channel = new RandomAccessFile(file, "rw").getChannel();
lock = channel.lock();
lock.release();
ready = true;
}
catch(IOException e) {
// Always Here
}
finally
{
if (channel != null)
channel.close();
}
return ready;
}
Non blocco mai la serratura. Si butta sempre
[Java 7 è obbligatorio ora] (http://www.oracle.com/technetwork/java/eol-135779.html) – Aubin
Si prega di inviare la traccia dello stack, perché IOException può avere più origine o causa, come un accesso negato. Prova "r" solo in 'RandomAccessFile (file," rw ")' al posto di "rw". – Aubin