Ich arbeite an einer Java 8-Anwendung, die eine Liste von Verzeichnissen/Dateien herunterlädt und diese in einem generierten Temp-Verzeichnis speichert (ein Verzeichnis in %LocalAppData%/Temp/
). Nach dem Herunterladen wird eine XML-Datei generiert und als Text in einer Datenbank gespeichert.Kann einen temporären Ordner nicht mit FileUtils löschen
Ein Temp-Verzeichnis wird mit erstellt:
Path packageTargetDirectory = java.nio.file.Files.createTempDirectory("packages");
In meinem JUnit-Test, möchte ich die Funktionalität testen. Es klappt. Nach dem Test möchte ich, dass mein Testcode das Verzeichnis mit Inhalt rekursiv entfernt (mit der Methode org.apache.commons.io.FileUtils.deleteDirectory()
).
Die Methode wird in einer Testfunktion aufgerufen, die mit der Anmerkung @After
annotiert ist. Wenn die Methode aufrufen und testen Sie den Code erhalte ich eine IOException
:
java.io.IOException: Unable to delete directory C:\Users\martin\AppData\Local\Temp\packages3096883734780765073\WindowsAzure.Storage
ich in das Verzeichnis bekam, und gerade versucht, es nach dem Test zu löschen hat lautete: ich es selbst löschen. Ich habe viele Dinge ausprobiert. Ich habe die org.apache.commons.io.FileUtils.forceDelete()
Methode versucht. Ich habe auch versucht den folgenden Code auf Löschen:
Files.walkFileTree(testDataDirectory, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
Files.delete(dir);
return FileVisitResult.CONTINUE;
}
});
Alles nicht die Verzeichnisstruktur auf Löschen. Der Inhalt scheint gelöscht zu sein.
Was könnte das Problem sein, ein Verzeichnis im temporären Ordner nicht löschen zu können? Ich dachte an geöffnete Ströme, aber ich habe anscheinend alle geschlossen.
Da die Erstellung des Ordners in anderem Code erfolgt, nicht im Testcode. – Martin
Im * normalen * Code lade ich Dateien herunter, und diese werden in einem temporären Verzeichnis gespeichert. Mit etwas Code wird eine Datei generiert. Ich gebe eine Path-Instanz zu dieser bestimmten Datei zurück. Ich erhalte das übergeordnete Element der Datei (welches das zu löschende Verzeichnis ist). – Martin
Können Sie das Verzeichnis ändern, in dem Sie Dateien herunterladen? Und schließlich einen von JUnit verwenden. Dies ermöglicht definitiv ein besseres Testen. – Admit