Hoe een map in Java te verwijderen
In dit artikel leer je over verschillende manieren om een directory te verwijderen op Java. We zullen voorbeelden bekijken om zowel een lege als een niet-lege directorystructuur te verwijderen.
Gebruik Files.delete()
Methode
In Java 7 en hoger kunt u Files.delete()
. gebruiken van NIO API om eenvoudig een lege . te verwijderen map:
try {
// directory path
Path path = Paths.get("./tmp");
// delete directory
Files.delete(path);
} catch (IOException ex) {
ex.printStackTrace();
}
De bovenstaande code genereert een uitzondering als de map niet bestaat. Om de uitzondering te vermijden , kunt u Files.deleteIfExists()
. gebruiken die alleen de map verwijdert als deze bestaat:
try {
// directory path
Path path = Paths.get("./tmp");
// delete directory
Files.deleteIfExists(path);
} catch (IOException ex) {
ex.printStackTrace();
}
Gewoonlijk zijn we verplicht om een map recursief te verwijderen . Beide Files.delete()
en Files.deleteIfExists()
zal een uitzondering geven als de map niet leeg is .
Om een niet-lege directory te verwijderen, kunnen we Files.walk()
. gebruiken methode om alle bestanden en submappen weer te geven en ze vervolgens een voor een te verwijderen, zoals hieronder weergegeven:
try {
// create a stream
Stream<Path> files = Files.walk(Paths.get("./tmp"));
// delete directory including files and sub-folders
files.sorted(Comparator.reverseOrder())
.map(Path::toFile)
.forEach(File::deleteOnExit);
// close the stream
files.close();
} catch (IOException ex) {
ex.printStackTrace();
}
Gebruik File.delete()
Methode
Een lege verwijderen directory, kunnen we ook de File.delete()
methode uit het oude Java I/O-pakket:
// directory path
File file = new File("./tmp");
// delete directory
file.delete();
Als de directory niet leeg is , moeten we wat extra werk doen en recursief alle bestanden en submappen verwijderen, zoals hieronder weergegeven:
public void deleteDir(File dir) {
File[] files = dir.listFiles();
if(files != null) {
for (final File file : files) {
deleteDir(file);
}
}
dir.delete();
}
Nu kunnen we de bovenstaande functie als volgt aanroepen:
File file = new File("./tmp");
deleteDir(file);
Apache Commons IO gebruiken
De Apache Commons IO-bibliotheek biedt FileUtils.deleteDirectory()
methode om een map inclusief alle bestanden en submappen te verwijderen. Hier is een voorbeeld:
try {
// directory path
File file = new File("./tmp");
// delete directory
FileUtils.deleteDirectory(file);
} catch (IOException ex) {
ex.printStackTrace();
}
Vergeet niet om Apache Commons IO-afhankelijkheid op te nemen in uw Maven-project pom.xml
bestand:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
Voeg voor een Gradle-project de volgende afhankelijkheid toe aan uw build.gralde
bestand:
implementation 'commons-io:commons-io:2.6'
Verder lezen
Mogelijk bent u geïnteresseerd in andere Java I/O-artikelen:
- Bestanden lezen en schrijven in Java
- Tekstbestanden lezen en schrijven in Java
- Binaire bestanden lezen en schrijven in Java
- Bestanden lezen en schrijven met Java NIO API
- Een bestand regel voor regel lezen in Java