So löschen Sie Dateien von einem Verzeichnis, aber nicht die Ordner
Habe ich einige code, der löscht alle Dateien in einem Ordner, das Problem ist zwar, das ist toll, ich möchte in der Lage sein, zu löschen alle Dateien in einem Verzeichnis, aber lassen Sie die Ordner intakt, so dass ich nicht haben, um in die einzelnen Ordner und löschen Sie die Dateien in es, das ist mein Aktueller code :
@ViewScoped
@ManagedBean
public class Delete {
public void DeleteFiles() throws IOException {
System.out.println("Called deleteFiles");
File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/up617648/");
String[] myFiles;
if (file.isDirectory()) {
myFiles = file.list();
for (int i = 0; i < myFiles.length; i++) {
File myFile = new File(file, myFiles[i]);
System.out.println(myFile);
myFile.delete();
}
DeleteFiles2();
}
}
public void DeleteFiles2() throws IOException {
System.out.println("Called deleteFiles2");
File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/Uploaded/up617648/");
String[] myFiles;
if (file.isDirectory()) {
myFiles = file.list();
for (int i = 0; i < myFiles.length; i++) {
File myFile = new File(file, myFiles[i]);
System.out.println(myFile);
myFile.delete();
}
}
}
}
Wie könnte ich das ändern mein code um dieses Ziel zu erreichen?
EDIT :
Habe ich geändert mein code :
@ViewScoped
@ManagedBean
public class Delete {
public void DeleteFiles() throws IOException {
System.out.println("Called deleteFiles");
File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/");
String[] myFiles;
if (file.isDirectory()) {
myFiles = file.list();
for (int i = 0; i < myFiles.length; i++) {
File myFile = new File(file, myFiles[i]);
System.out.println(myFile);
if (!myFile.isDirectory()) {
myFile.delete();
}
}
DeleteFiles2();
}
}
Und während Sie dies tut, rufen Sie alle Ordner, dies ist meine Konsole:
INFO: Called deleteFiles
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\cam01342
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\geg00061
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\null
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\up617648
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\up626088
INFO: Called deleteFiles2
Tt nicht löschen Sie die Dateien in diese Ordner, wie kann ich dies tun?
EDIT 3: Mit Rekursion ich bin jetzt immer einen stack-überlauf-Fehler.
Hier ist mein code :
public void DeleteFiles() {
File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/");
System.out.println("Called deleteFiles");
if (file.isDirectory()) {
for (File f : file.listFiles()) {
DeleteFiles();
}
} else {
file.delete();
}
}
wollen Sie die Datei löschen, rekursiv oder nur die Dateien in den angegebenen Ordner, verlassen-Dateien in den untergeordneten Ordnern
ich möchte in der Lage sein, das löschen aller Dateien innerhalb einer Verzeichnis-Struktur, aber lassen Sie die Ordner intakt, ein edit Hinzugefügt
InformationsquelleAutor user2065929 | 2013-02-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht einfach tun
statt
?
Die Rekursion. Haben Sie einen Blick auf André ' s Antwort.
InformationsquelleAutor thejh
einfach benutzen Sie einfach
File.isDirectory()
.nur prüfen, ob es eine Datei oder ein Verzeichnis. wenn es die Datei dann löschen Sie es, ansonsten lassen Sie es
in Ihrem Fall
InformationsquelleAutor Ravindra Bagale
Mit Rekursion ist es sehr ordentlich 😉
Wenn Sie versucht haben, löschen Sie Millionen oder Milliarden von Dateien könnte es normal sein, während die Rekursion ist ein wenig mehr Speicher verbrauchen als ein konventioneller Ansatz; ich rief
deleteFiles (new File("C:\\Temp\\"));
gelöscht und 1500 Dateien und 32 Ordnern ohne Problemeok danke, sollte es nur löschen, 20 Dateien mit 4 Ordnern, aber die Ordner, ich werde versuchen, um zu sehen, ob ich bekommen kann es arbeiten
ein kleiner Tippfehler könnten am Ende in eine Endlosschleife (wenn Sie zum Beispiel schrieb
deleteFiles(file);
) - dies führt in der Regel zu einem heap-überlaufsorry, hab dein edit #3 zu spät - das wird nicht funktionieren, verursachen Datei initialisiert innerhalb die Methode; jedoch, Sie haben, um den ursprünglichen Ordner als parameter und rufen Sie rekursiv mit Kindern;
InformationsquelleAutor Trinimon
Ich denke, das wird tun
Dann müssen Sie rufen Sie
deleteFiles(new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/"))
;InformationsquelleAutor Arun P Johny
Rekursion übertrieben ist, wie durch die Tatsache belegt, dass ein follow-up-Frage benötigt wurde. Siehe meine Antwort, die es für einen viel einfacheren Weg:
Rekursive Löschung verursacht einen stack-überlauf-Fehler
InformationsquelleAutor Ryan Stewart
können Sie der unten Methode.
InformationsquelleAutor Prabhat