Opprette midlertidige kataloger i Java

1. Oversikt

Midlertidige kataloger er nyttige når vi trenger å lage et sett med filer som vi senere kan forkaste. Når vi oppretter midlertidige kataloger, kan vi delegere til operativsystemet hvor vi skal plassere dem eller spesifisere hvor vi vil plassere dem.

I denne korte opplæringen lærer vi hvordan du oppretter midlertidige kataloger i Java ved hjelp av forskjellige APIer og tilnærminger. Alle eksemplene i denne opplæringen vil bli utført ved hjelp av vanlig Java 7+, Guava og Apache Commons IO.

2. Delegere til operativsystemet

En av de mest populære tilnærmingene som brukes til å lage midlertidige kataloger, er å delegere destinasjonen til det underliggende operativsystemet. Plasseringen er gitt av java.io.tmpdir eiendom, og hvert operativsystem har sin egen struktur og opprydningsrutiner.

I vanlig Java oppretter vi en katalog ved å spesifisere prefikset vi vil at katalogen skal ta:

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

Ved hjelp av Guava er prosessen lik, men vi kan ikke spesifisere hvordan vi vil prefikse katalogen vår:

Streng tmpdir = Files.createTempDir (). GetAbsolutePath (); Streng tmpDirsLocation = System.getProperty ("java.io.tmpdir"); assertThat (tmpdir). starter med (tmpDirsLocation);

Apache Commons IO gir ikke en måte å opprette midlertidige kataloger på. Det gir en innpakning for å få operativsystemets midlertidige katalog, og så er det opp til oss å gjøre resten:

Streng tmpDirsLocation = System.getProperty ("java.io.tmpdir"); Banebane = Paths.get (FileUtils.getTempDirectory (). GetAbsolutePath (), UUID.randomUUID (). ToString ()); String tmpdir = Files.createDirectories (sti) .toFile (). GetAbsolutePath (); assertThat (tmpdir). starter med (tmpDirsLocation);

For å unngå navnekollisjon med eksisterende kataloger bruker vi UUID.randomUUID () for å opprette en katalog med et tilfeldig navn.

3. Spesifisere plassering

Noen ganger må vi spesifisere hvor vi vil opprette den midlertidige katalogen vår. Et godt eksempel er under en Maven-bygning. Siden vi allerede har en “midlertidig” bygning mål katalog, kan vi bruke den katalogen til å plassere midlertidige kataloger som vår bygg kan trenge:

Sti tmpdir = Files.createTempDirectory (Paths.get ("mål"), "tmpDirPrefix"); assertThat (tmpdir.toFile (). getPath ()). startsWith ("target");

Både Guava og Apache Commons IO mangler metoder for å lage midlertidige kataloger på bestemte steder.

Det er verdt å merke seg det de mål katalogen kan være forskjellig, avhengig av byggekonfigurasjonen. En måte å gjøre det skuddsikkert på er å overføre målkatalogplasseringen til JVM som kjører testen.

Siden operativsystemet ikke tar seg av oppryddingen, kan vi gjøre bruk av det File.deleteOnExit ():

tmpdir.toFile (). deleteOnExit ();

Denne måten, filen slettes når JVM avsluttes, men bare hvis avslutningen er grasiøs.

4. Bruke forskjellige filattributter

Som alle andre filer eller kataloger er det mulig å spesifisere filattributter ved opprettelsen av en midlertidig katalog. Så hvis vi ønsker å lage en midlertidig katalog som bare kan leses av brukeren som oppretter den, kan vi spesifisere settet med attributter som vil oppnå det:

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

Som forventet gir ikke Guava og Apache Commons IO en måte å spesifisere attributtene når du oppretter midlertidige kataloger.

Det er også verdt å merke seg at det forrige eksemplet forutsetter at vi er under et Posix-kompatibelt filsystem som Unix eller macOS.

Mer informasjon om filattributter finner du i vår guide til NIO2 File Attribute APIer.

5. Konklusjon

I denne korte opplæringen undersøkte vi hvordan du oppretter midlertidige kataloger i vanlig Java 7+, Guava og Apache Commons IO. Vi så at vanlig Java er den mest fleksible måten å lage midlertidige kataloger på, da det tilbyr et bredere spekter av muligheter, samtidig som ordlyden holdes på et minimum.

Som vanlig er all kildekoden for denne opplæringen tilgjengelig på GitHub.


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