Tijdelijke mappen maken in Java

1. Overzicht

Tijdelijke mappen zijn handig wanneer we een set bestanden moeten maken die we later kunnen verwijderen. Wanneer we tijdelijke mappen maken, kunnen we aan het besturingssysteem delegeren waar we ze willen plaatsen of zelf specificeren waar we ze willen plaatsen.

In deze korte tutorial zullen we leren hoe u tijdelijke mappen in Java kunt maken met behulp van verschillende API's en benaderingen. Alle voorbeelden in deze tutorial worden uitgevoerd met Java 7+, Guava en Apache Commons IO.

2. Delegeren naar het besturingssysteem

Een van de meest populaire benaderingen die worden gebruikt om tijdelijke mappen te maken, is door de bestemming te delegeren aan het onderliggende besturingssysteem. De locatie wordt gegeven door de java.io.tmpdir property, en elk besturingssysteem heeft zijn eigen structuur en opschoningsroutines.

In gewoon Java maken we een map door het voorvoegsel te specificeren dat we willen dat de map neemt:

String tmpdir = Files.createTempDirectory ("tmpDirPrefix"). ToFile (). GetAbsolutePath (); String tmpDirsLocation = System.getProperty ("java.io.tmpdir"); assertThat (tmpdir) .startsWith (tmpDirsLocation);

Met Guava is het proces vergelijkbaar, maar we kunnen niet specificeren hoe we onze directory willen prefixen:

String tmpdir = Files.createTempDir (). GetAbsolutePath (); String tmpDirsLocation = System.getProperty ("java.io.tmpdir"); assertThat (tmpdir) .startsWith (tmpDirsLocation);

Apache Commons IO biedt geen manier om tijdelijke mappen te maken. Het biedt een wrapper om de tijdelijke directory van het besturingssysteem op te halen, en dan is het aan ons om de rest te doen:

String tmpDirsLocation = System.getProperty ("java.io.tmpdir"); Padpad = Paths.get (FileUtils.getTempDirectory (). GetAbsolutePath (), UUID.randomUUID (). ToString ()); String tmpdir = Files.createDirectories (pad) .toFile (). GetAbsolutePath (); assertThat (tmpdir) .startsWith (tmpDirsLocation);

Om naamconflicten met bestaande mappen te voorkomen, gebruiken we UUID.randomUUID () om een ​​map met een willekeurige naam te maken.

3. Specificeren van de locatie

Soms moeten we specificeren waar we onze tijdelijke directory willen aanmaken. Een goed voorbeeld is tijdens een Maven-build. Omdat we al een "tijdelijke" build hebben doelwit directory, kunnen we gebruik maken van die directory om tijdelijke directories te plaatsen die onze build nodig heeft:

Pad tmpdir = Files.createTempDirectory (Paths.get ("doel"), "tmpDirPrefix"); assertThat (tmpdir.toFile (). getPath ()). startsWith ("target");

Zowel Guava als Apache Commons IO missen methoden om tijdelijke mappen op specifieke locaties te maken.

Het is vermeldenswaard dat de doelwit directory kan verschillen, afhankelijk van de buildconfiguratie. Een manier om het kogelvrij te maken, is door de doelmaplocatie door te geven aan de JVM die de test uitvoert.

Omdat het besturingssysteem niet zorgt voor het opruimen, kunnen we er gebruik van maken Bestand.deleteOnExit ():

tmpdir.toFile (). deleteOnExit ();

Op deze manier het bestand wordt verwijderd zodra de JVM wordt beëindigd, maar alleen als de beëindiging correct is.

4. Verschillende bestandskenmerken gebruiken

Net als elk ander bestand of elke andere map, is het mogelijk om bestandskenmerken op te geven bij het maken van een tijdelijke map. Dus als we een tijdelijke map willen maken die alleen kan worden gelezen door de gebruiker die deze heeft gemaakt, kunnen we de set attributen specificeren die dat zullen bereiken:

FileAttribute attrs = PosixFilePermissions.asFileAttribute (PosixFilePermissions.fromString ("r --------")); Pad tmpdir = Files.createTempDirectory (Paths.get ("doel"), "tmpDirPrefix", attrs); assertThat (tmpdir.toFile (). getPath ()). startsWith ("target"); assertThat (tmpdir.toFile (). canWrite ()). isFalse ();

Zoals verwacht bieden Guava en Apache Commons IO geen manier om de attributen op te geven bij het maken van tijdelijke mappen.

Het is ook vermeldenswaard dat in het vorige voorbeeld wordt aangenomen dat we onder een Posix-compatibel bestandssysteem zitten, zoals Unix of macOS.

Meer informatie over bestandskenmerken is te vinden in onze Gids voor NIO2 File Attribute API's.

5. Conclusie

In deze korte tutorial hebben we onderzocht hoe we tijdelijke mappen kunnen maken in gewone Java 7+, Guava en Apache Commons IO. We zagen dat gewoon Java de meest flexibele manier is om tijdelijke mappen te maken, omdat het een breder scala aan mogelijkheden biedt terwijl de breedsprakigheid tot een minimum wordt beperkt.

Zoals gewoonlijk is alle broncode voor deze tutorial beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found