Stvaranje privremenih direktorija u Javi

1. Pregled

Privremeni direktoriji dobro dođu kad trebamo stvoriti skup datoteka koje ćemo kasnije moći odbaciti. Kada stvaramo privremene direktorije, možemo dodijeliti operativnom sustavu gdje ih smjestiti ili sami odrediti gdje ih želimo smjestiti.

U ovom kratkom vodiču naučit ćemo kako stvoriti privremene direktorije u Javi koristeći različite API-je i pristupe. Svi primjeri u ovom vodiču izvest će se pomoću običnih Java 7+, Guava i Apache Commons IO.

2. Delegirajte u operativni sustav

Jedan od najpopularnijih pristupa koji se koristi za stvaranje privremenih direktorija je delegiranje odredišta osnovnom operativnom sustavu. Mjesto je dato oznakom java.io.tmpdir svojstvo, a svaki operativni sustav ima svoju strukturu i rutine čišćenja.

U običnoj Javi kreiramo direktorij navodeći prefiks koji želimo da direktorij uzme:

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

Korištenjem Guave postupak je sličan, ali ne možemo odrediti kako želimo dodati svoj direktorij u prefiks:

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

Apache Commons IO ne nudi način za stvaranje privremenih direktorija. Pruža omot za dobivanje privremenog direktorija operativnog sustava, a onda je na nama da učinimo ostalo:

Niz tmpDirsLocation = System.getProperty ("java.io.tmpdir"); Put puta = Paths.get (FileUtils.getTempDirectory (). GetAbsolutePath (), UUID.randomUUID (). ToString ()); Niz tmpdir = Datoteke.createDirectories (put) .toFile (). GetAbsolutePath (); assertThat (tmpdir) .startsWith (tmpDirsLocation);

Koristimo se kako bismo izbjegli sukobe imena s postojećim direktorijima UUID.randomUUID () stvoriti direktorij sa slučajnim imenom.

3. Određivanje lokacije

Ponekad moramo odrediti gdje želimo stvoriti naš privremeni direktorij. Dobar primjer je tijekom gradnje Mavena. Budući da već imamo "privremenu" građu cilj direktoriju, možemo ga koristiti za postavljanje privremenih direktorija koji će nam možda trebati:

Put tmpdir = Files.createTempDirectory (Paths.get ("target"), "tmpDirPrefix"); assertThat (tmpdir.toFile (). getPath ()). startWith ("target");

I Guava i Apache Commons IO nemaju metode za stvaranje privremenih direktorija na određenim lokacijama.

Vrijedno je to napomenuti the cilj direktorij može biti različit, ovisno o konfiguraciji gradnje. Jedan od načina da ga učinite neprobojnim metkom je prosljeđivanje mjesta ciljnog direktorija JVM-u koji izvodi test.

Kako se operativni sustav ne brine za čišćenje, možemo ga iskoristiti File.deleteOnExit ():

tmpdir.toFile (). deleteOnExit ();

Ovuda, datoteka se briše nakon prestanka JVM-a, ali samo ako je ukidanje elegantno.

4. Korištenje različitih atributa datoteke

Kao i bilo koja druga datoteka ili direktorij, moguće je navesti atribute datoteke prilikom stvaranja privremenog direktorija. Dakle, ako želimo stvoriti privremeni direktorij koji može čitati samo korisnik koji ga kreira, možemo odrediti skup atributa koji će to postići:

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

Kao što se očekivalo, Guava i Apache Commons IO ne pružaju način za specificiranje atributa prilikom stvaranja privremenih direktorija.

Također je vrijedno napomenuti da prethodni primjer pretpostavlja da se nalazimo u sustavu datoteka koji je u skladu s Posixom, poput Unixa ili MacOS-a.

Više informacija o atributima datoteka možete pronaći u našem Vodiču za API-je NIO2 atributa datoteka.

5. Zaključak

U ovom kratkom vodiču istražili smo kako stvoriti privremene direktorije u običnom Java 7+, Guava i Apache Commons IO. Vidjeli smo da je obična Java najfleksibilniji način za stvaranje privremenih direktorija jer nudi širi spektar mogućnosti, a istodobno svodi na minimum.

Kao i obično, sav izvorni kod za ovu lekciju dostupan je na GitHubu.