PDA

View Full Version : [Java] Eliminare un file


Emaborsa
21-04-2010, 16:38
Scrivendo un programma in java (primi passi), ho dovuto creare una classe File che andrebbe a sostituire la java.io.File. A questo punto se io applico delete() ad un oggetto di tipo File (mio) ovviamente mi da errore. Perciò cercando in giro ho trovato un codice e l'ho adattato alla mia esigenza:

public void del() {

// A File object to represent the filename
java.io.File f = new java.io.File(getName()+".txt");

// Make sure the file or directory exists and isn't write protected
if (!f.exists())
throw new IllegalArgumentException(
"Delete: no such file or directory: " + getName()+".txt");

if (!f.canWrite())
throw new IllegalArgumentException("Delete: write protected: "
+ getName()+".txt");

// If it is a directory, make sure it is empty
if (f.isDirectory()) {
String[] files = f.list();
if (files.length > 0)
throw new IllegalArgumentException(
"Delete: directory not empty: " + getName()+".txt");
}

// Attempt to delete it
boolean success = f.delete();

if (!success)
throw new IllegalArgumentException("Delete: deletion failed");
}

Uso il metodo...e mi da sempre errore, ma l'ultimo. è come se non riuscisse ad eliminare il file, ma non capisco il perchè. Qualcuno mi sa dare una dritta?

lupoxxx87
21-04-2010, 16:47
magari è una stupidata....

ma sei sicuro che questo file esista ?

java.io.File f = new java.io.File(getName()+".txt");

banryu79
21-04-2010, 17:26
magari è una stupidata....

ma sei sicuro che questo file esista ?

java.io.File f = new java.io.File(getName()+".txt");

Presumo di sì, dato che ha inserito il controllo:

...
// Make sure the file or directory exists and isn't write protected
if (!f.exists())
throw new IllegalArgumentException(
"Delete: no such file or directory: " + getName()+".txt");


Ho visto che controlli di poter modificare il file con il metodo canWrite però, a leggere la relativa documentazione, il Security Manager in questo caso spara l'eccezione a seguito di una chiamata a SecurityManager.checkWrite(java.lang.String).

Invece a chiamare File.delete() il Security Manager chiama SecurityManager.checkDelete(java.lang.String), forse non è la stessa cosa.
Sul momento non mi viene in mente nulla, mi ricordo però che a me una volta era capitato di non riuscire a cancellare un file perchè da un'altra parte nel codice avevo dimenticato di chiudere uno Scanner che usavo per leggerci dentro (quindi forse al momento della chiamata a File.delete lo stream relativo al file era ancora aperto e questo causava il problema).

Emaborsa
21-04-2010, 17:32
Se il file non esistesse mi darebbe l'altro errore.
Ho trovato un altro codice, simile...ma sempre la stessa cosa.
Di solito se il Sistema non elimina il file è perchè è in uso. Sembra che la mia applicazione tenga caricato tale file e ovviamente non riesce ad eliminarlo, anche se presente. Ma in questo caso non dovrebbe darmi errore:

if (!f.canWrite())
throw new IllegalArgumentException("Delete: write protected: "
+ getName()+".txt");

Emaborsa
22-04-2010, 12:29
Ho trovato il dilemma. Nel codice prima di tentare di eliminare il file, ho aperto un Filereader su file in questione e avevo dimenticato di dargli il comando close(). Per questo motivo non me lo cancellava... Una volta messo il close(), cancella.

Gecorosso
05-10-2012, 11:51
Ragazzi non sò come ringraziarvi , stavo per impazzire!!! Grazie di cuore per la soluzione!!!