Newsgroup: it.comp.java
Titolo: rinominare un file

 
Salve a tutti,
devo rinominare un file che, perņ, puo essere detenuto da un'altro
processo...mi spiego meglio, non sņ se quealcun'altro detiene il file ma io
riesco comunque a scriverci sopra e se faccio
 
   file.canWrite()
mi ritorna true...il problema č che avvolte non riesco a rinominarlo.
Qualcuno conosce un modo per vedere se il file č detenuto da un'altro
processo e, soprattutto, come posso uccidere qualunque processo, che non sia
il mio, che detiene il file??
grazie mille
Diego
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 il mio, che detiene il file??
Per processi intendi 'altre cose nel sistema'? In questo caso non credo 
che si possa sapere chi è se non, appunto , interrogando il sistema 
(ovviamente ogni OS in modo diverso). Se intendi invece altri thread 
java che girano, il trucco per cancellare i file è ricordarsi sempre di 
rilasciare le risorse File e accompagnatori... mi spiego. Se da qualche 
parte nel codice c'e'
   out.close();
ma non
   out=null;
la JVM pensa che l'oggetto sia ancora in uso e c'e' caso che non ti 
faccia cancellare il file relativo all'oggetto in questione.
Altra cosa: non so se nel 'nuovo' package di io (nio) ci sia qualcosa 
per controllare meglio la cancellazione dato che non l'ho mai usato, 
controlla.
Tanto per il folkore in una applicazione ho visto la cancellazione di un 
file ripetuta n volte ad intervalli di qualche secondo per aspettare che 
qualcuno (JVM, Windoz, o altri) rilasciasse le risorse...
bye
DKano

Ti ringrazio per l'interessamento...
il mi problema, come hai ben supposto, riguarda un thread Java lanciato
precedentemente sul file...io ho la priorità e quindi su quel file posso
fare quello che voglio. Il mio grosso problema è che quel file è sempre
scrivibile da me ma non sempre cancellabile e non sono riuscito a capire
come mai... comunque di questo poco mi importa la mia necessità è
cancellarlo e basta... ho provato con:
file.close();
file=null;
ma non funziona. C'è un modo per tagliare completamente qualsiasi altro
thread che detiene il file??
grazie mille
ciao.


 
Non funziona perché, probabilmente, il thread si tiene una qualche 
riferimento al file... dove le hai messe quelle istruzioni? Nel thread 
che deve cancellare o nell'altro?
L'unica cosa che mi viene in mente, comunque, sarebbe avere un 
meccanismo per dire ai thread "smollate il file perché lo devo 
cancellare". Seguendo quello che di solito si fa per fermarli (non 
stop() che è deprecated)  un boolean e/o un'area dati condivisa dove si 
possa mettere il nome del file (o l'ogetto File stesso) in modo da 
avvisare i thread di rilasciarlo potrebbe esser una soluzione. Oppure, 
per non andar troppo di fino, si può usare un semplice boolean che dica 
'mollate tutti i file' se questo può andar bene.
es.
volatile boolean smollaFiles=false;
while(blabla) { //loop principale thread 'schiavo'
   ....
   if(smollaFile) {
     //chiudi e rilascia tutti i file
   }
   ....
}
un sistema 'automatico' per imporre il rilascio non lo conosco, non 
credo neanche ci sia. Dai però un occhiata ai package sulla concorrenza 
nuovi della 1.5 perché non li conosco
bye
DKano

Che eccezione ti ritorna?

Il fatto è che il thread è stato lanciato da un'altra applicazione...in
definitiva a me interessa solo forzare la cancellazione del file e della
cartellina dove si trova il file che avvolte fallisce...esiste un modo per
fare questo??
grazie
ciao


 fare questo??
Hai provato con il metodo deleteOnExit() della classe File?
Saluti
CarMas


No, ma da quello che ho capito il file viene cancellato quando la JVM
termina e a me interessa cencellarlo prima che il mio thread termini.
Grazie


           Ok...grazie a tutti...credo di aver risolto in un altro modo.
grazie mille
ciao Diego
