Java >> Java-zelfstudie >  >> Java

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

Java-tag