2017-07-20 7 views
3

Dies ist mein Code. Damit wähle ich eine Fahrt aus und sage in diesem Fall F-Antrieb. Bei der Ausführung versuche ich, eine Datei in diesem Ordner zu löschen, obwohl die Datei (wenn sie korrekt eingegeben wurde) gelöscht wird, aber delete() gibt false zurück. Darf ich wissen warum?Löschen einer Datei mit dem Namen der Erweiterung in JAVA

System.out.println("Enter file to be deleted:"); 
String del = sc.nextLine(); //give file name as string with extension 
File delFile = new File(del); //convert string to file type 
for (File fs: listOfFiles) { 
    if (fs.getName().compareTo(delFile.getName()) == 0) { 
     System.out.println(fs.getName()); 
     System.out.println("Inside loop"); 
     boolean dele = fs.delete(); 
     System.out.println("Successful/unsucceful: " + fs.getName() + "..." + fs.delete()); 
    } else 
     System.out.println("invalid : " + fs.getName()); 
} 
+2

verwenden besser 'Files.delete()' stattdessen verwenden - das wirft eine ** Ausnahme **, wenn das Löschen schief geht - und das gibt Ihnen mehr Einblick als "falsch". – GhostCat

+0

Nur als Nebenbemerkung. Ich würde einfach 'fs.getName(). Equals (delFile.getName())' anstelle von 'compareTo' verwenden. – Christian

Antwort

3

Weil Sie delete zweimal aufrufen. Beim zweiten Mal ist es falsch, da es beim ersten Mal gelöscht wurde.

Ändern Sie diese

System.out.println("Successful/unsucceful: " + fs.getName() + "..." + fs.delete()); 

zu

System.out.println("Successful/unsucceful: " + fs.getName() + "..." + dele); 
+0

Vielen Dank. – Shailja

+0

Ich muss einen Dateinamen eingeben, um ihn zu löschen. Der Ansatz, den ich nehme, ist durch die Scanner-Klasse. Ich nehme eine Zeichenkette und wandle sie in Dateityp um. Zeichenfolge del = sc.nextLine(); // Geben Sie den Dateinamen als Zeichenfolge mit der Erweiterung ein. Datei delFile = new File (del); // Zeichenkette in Dateityp konvertieren Gibt es einen anderen Ansatz, um den Dateinamen direkt zu übernehmen? – Shailja

+0

@Shailja Soweit ich aus Ihrem Code ersehen kann, vergleichen Sie den Namen. Sie müssen keine neue Datei erstellen. Verwenden Sie einfach den Dateinamen von 'sc.nextLine' wie er ist. –

6

Ihr Problem ist, dass Sie fs.delete() ein zweites Mal anrufen, nachdem sie bereits gelöscht.

System.out.println("Successful/unsucceful: " + fs.getName() + "..." + dele); 

Auch nur als Bemerkung am Rande: Weil es nicht mehr existiert, kann es nicht

Gerade der boolean Wert, den Sie festgelegt haben, bevor rufen gelöscht werden. Ich würde einfach fs.getName().equals(delFile.getName()) anstatt Ihrer compareTo

+0

Auch ich würde die Rückgabe von fs.getName() in einer Variablen speichern, anstatt die Funktion dreimal aufzurufen. – Carlos3dx

Verwandte Themen