Ideiglenes könyvtárak létrehozása Java-ban

1. Áttekintés

Az ideiglenes könyvtárak jól jönnek, amikor létre kell hoznunk egy olyan fájlkészletet, amelyet később eldobhatunk. Ideiglenes könyvtárak létrehozásakor delegálhatjuk az operációs rendszerbe, hova tegyük őket, vagy megadhatjuk magunkat, hová szeretnénk helyezni őket.

Ebben a rövid bemutatóban megtanuljuk hogyan lehet ideiglenes könyvtárakat létrehozni a Java-ban különböző API-k és megközelítések használatával. Az oktatóanyag összes példáját egyszerű Java 7+, Guava és Apache Commons IO használatával hajtjuk végre.

2. Delegáljon az operációs rendszerbe

Az ideiglenes könyvtárak létrehozásának egyik legnépszerűbb megközelítése a cél delegálása az alapul szolgáló operációs rendszerre. A helyet a java.io.tmpdir tulajdonság, és minden operációs rendszernek megvan a maga szerkezete és tisztítási rutinja.

A sima Java-ban létrehozunk egy könyvtárat az előtag megadásával, amelyet a könyvtárnak akarunk venni:

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

A Guava használatával a folyamat hasonló, de nem tudjuk meghatározni, hogy miként szeretnénk előtagolni a könyvtárunkat:

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

Az Apache Commons IO nem nyújt lehetőséget ideiglenes könyvtárak létrehozására. Ez egy burkolót biztosít az operációs rendszer ideiglenes könyvtárának megszerzéséhez, majd a többin múlik:

Karakterlánc tmpDirsLocation = System.getProperty ("java.io.tmpdir"); Elérési útvonal = Paths.get (FileUtils.getTempDirectory (). GetAbsolutePath (), UUID.randomUUID (). ToString ()); Karakterlánc tmpdir = Files.createDirectories (elérési út) .toFile (). GetAbsolutePath (); assertThat (tmpdir) .startsWith (tmpDirsLocation);

Annak érdekében, hogy elkerüljük a névütközéseket a meglévő könyvtárakkal, használjuk UUID.randomUUID () véletlenszerű könyvtárat létrehozni.

3. A hely megadása

Néha meg kell határoznunk, hová szeretnénk létrehozni az ideiglenes könyvtárat. Jó példa egy Maven-építkezés során. Mivel már van „ideiglenes” felépítésünk cél könyvtárat, használhatjuk azt a könyvtárat ideiglenes könyvtárak elhelyezéséhez, amelyekre a buildünknek szüksége lehet:

Elérési út tmpdir = Files.createTempDirectory (Paths.get ("target"), "tmpDirPrefix"); assertThat (tmpdir.toFile (). getPath ()). startsWith ("cél");

Mind a Guava, mind az Apache Commons IO nem rendelkezik módszerekkel ideiglenes könyvtárak létrehozására meghatározott helyeken.

Érdemes ezt megjegyezni a cél könyvtár eltérő lehet a build konfigurációjától függően. A golyóállóvá tétel egyik módja a célkönyvtár helyének átadása a tesztet futtató JVM-nek.

Mivel az operációs rendszer nem gondoskodik a tisztításról, használhatjuk File.deleteOnExit ():

tmpdir.toFile (). deleteOnExit ();

Ily módon, a fájl törlődik, ha a JVM megszűnik, de csak akkor, ha a felmondás kecses.

4. Különböző fájlattribútumok használata

Mint bármely más fájl vagy könyvtár, ideiglenes könyvtár létrehozásakor is megadhatók a fájlattribútumok. Tehát, ha ideiglenes könyvtárat akarunk létrehozni, amelyet csak az azt létrehozó felhasználó olvashat, megadhatjuk az attribútumkészletet, amely ezt megvalósítja:

FileAttribute attrs = PosixFilePermissions.asFileAttribute (PosixFilePermissions.fromString ("r --------")); Elérési út tmpdir = Files.createTempDirectory (Paths.get ("target"), "tmpDirPrefix", attrs); assertThat (tmpdir.toFile (). getPath ()). startsWith ("cél"); assertThat (tmpdir.toFile (). canWrite ()). isFalse ();

A várakozásoknak megfelelően a Guava és az Apache Commons IO nem nyújt lehetőséget az attribútumok megadására ideiglenes könyvtárak létrehozásakor.

Érdemes megjegyezni azt is, hogy az előző példa feltételezi, hogy egy Posix-kompatibilis fájlrendszer alatt állunk, például Unix vagy macOS.

További információ a fájlattribútumokról a NIO2 fájlattribútum API-k útmutatójában található.

5. Következtetés

Ebben a rövid bemutatóban azt kutattuk, hogyan lehet ideiglenes könyvtárakat létrehozni egyszerű Java 7+, Guava és Apache Commons IO rendszerekben. Láttuk, hogy a sima Java a legrugalmasabb módszer az ideiglenes könyvtárak létrehozására, mivel szélesebb körű lehetőségeket kínál, miközben a bőbeszédet minimálisra csökkenti.

Szokás szerint az oktatóanyag összes forráskódja elérhető a GitHubon.