Java fichier.delete () ' ne supprime pas le fichier spécifié

C'est actuellement ce que je dois supprimer le fichier mais ça ne fonctionne pas. Je pensais que c'était peut-être un problème de permission, mais ce n'était pas le cas. Le fichier que je teste est vide et existe, donc je ne sais pas pourquoi il ne l'efface pas.

UserInput.prompt("Enter name of file to delete");
String name = UserInput.readString();
File file = new File("Files" + name + ".txt");
file.delete();

toute aide serait grandement appréciée!

j'ai maintenant:

File file = new File(catName + ".txt");
String path = file.getCanonicalPath();
File filePath = new File(path);
filePath.delete();

pour essayer de trouver le chemin correct au moment de l'exécution de sorte que si le programme est transféré à un ordinateur différent il trouvera toujours le fichier.

32
demandé sur Brian Tompsett - 汤莱恩 2010-12-20 02:21:19

10 réponses

Être sûr de trouver votre répertoire de travail courant, et d'écrire votre chemin d'accès relatif.

ce code:

File here = new File(".");
System.out.println(here.getAbsolutePath());

... imprimé ce répertoire.

aussi, sans rapport avec votre question, essayez d'utiliser File.separator pour rester indépendant du système D'exploitation. Backslashes ne fonctionne que sur Windows.

27
répondu Goran Jovic 2016-07-25 12:51:23

le problème pourrait aussi être dû à n'importe quel flux de sortie que vous avez oublié de fermer. Dans mon cas, je travaillais avec le fichier avant que le fichier soit supprimé. Cependant à un endroit dans les opérations de fichier, j'avais oublié de fermer un flux de sortie que j'avais l'habitude d'écrire dans le fichier qui a été tenté de supprimer plus tard.

47
répondu user2926391 2013-12-16 22:38:03

j'ai le même problème! alors réalisé que mon répertoire n'est pas vide. J'ai trouvé la solution dans un autre thread: ne peut pas supprimer le répertoire à travers Java

/**
 * Force deletion of directory
 * @param path
 * @return
 */
static public boolean deleteDirectory(File path) {
    if (path.exists()) {
        File[] files = path.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {
                deleteDirectory(files[i]);
            } else {
                files[i].delete();
            }
        }
    }
    return (path.delete());
}
11
répondu Maha 2017-05-23 12:10:10

je soupçonne que le problème est que le chemin est incorrect. Essayez ceci:

UserInput.prompt("Enter name of file to delete");
String name = UserInput.readString();
File file = new File("\Files\" + name + ".txt");
if (file.exists()) {
    file.delete();
} else {
    System.err.println(
        "I cannot find '" + file + "' ('" + file.getAbsolutePath() + "')");
}
5
répondu Stephen C 2010-12-19 23:35:37

Si vous voulez supprimer le fichier d'abord fermer toutes les connexions et les ruisseaux. après que supprimer le fichier.

4
répondu Anurag Mishra 2016-08-12 07:47:13

dans mon cas, c'est le close() qui n'a pas été exécuté en raison d'une exception non freinée.

void method() throws Exception {
    FileInputStream fis = new FileInputStream(fileName);
    parse(fis);
    fis.close();
}

suppose que l'exception est jetée sur l'analyse (), qui n'est pas traitée dans cette méthode et donc le fichier n'est pas fermé, le long de la route, le fichier est supprimé, et que la déclaration de suppression échoue, et ne pas supprimer.

donc, au lieu de ça j'ai eu le code comme ça, puis ça a marché...

    try {
        parse(fis);
    }
    catch (Exception ex) {
        fis.close();
        throw ex;
    }

sorte de base de Java, que nous négligeons parfois.

1
répondu Abdul Ahad 2015-08-20 06:02:47

essayer de fermer tous les FileOutputStream/FileInputStream vous avez ouvert plus tôt dans d'autres méthodes ,puis essayer de supprimer ,a fonctionné comme un charme.

0
répondu ABHISHEK BHARDWAJ 2018-08-17 12:27:10

dans mon cas, je traitais un ensemble de fichiers jar contenus dans un répertoire. Après les avoir traités, j'ai essayé de les supprimer de ce répertoire, mais ils ne l'ont pas fait. J'utilisais JarFile pour les traiter et le problème était que j'ai oublié de fermer le JarFile quand j'ai eu fini.

0
répondu Tom Rutchik 2018-10-03 22:15:29

le problème est que vérifier la météo vous avez fermé tous les cours d'eau ou non si ouvert, fermez les flux et supprimez, renommez..etc le fichier c'est travaillé pour moi

-1
répondu chatala.Akhileswarakumar 2017-05-03 18:26:19

j'ai fait l'erreur d'ouvrir un lecteur tampon comme:

File f = new File("somefile.txt");
BufferedReader br = new BufferedReader(new FileReader(f));

...et bien sûr je ne pouvais pas exécuter le f.delete() parce que j'ai enveloppé le FileReader au lieu d'instancier sa propre variable où je pourrais explicitement la fermer. Duh...

une fois que j'ai codé:

File f = new File("somefile.txt");
FileReader fread = new FileReader(f);
BufferedReader br = new BufferedReader(fread);

je pouvais émettre un br.close(); br=null; fread.close(); fread=null; et le f.delete() fonctionnait très bien.

-1
répondu NoteBender 2018-01-11 09:52:43