Membuat Direktori Sementara di Jawa

1. Gambaran keseluruhan

Direktori sementara sangat berguna apabila kita perlu membuat satu set fail yang kemudian kita boleh buang. Apabila kita membuat direktori sementara, kita boleh mewakilkan ke sistem operasi di mana meletakkannya atau menentukan sendiri tempat kita ingin meletakkannya.

Dalam tutorial ringkas ini, kita akan belajar bagaimana membuat direktori sementara di Java menggunakan API dan pendekatan yang berbeza . Semua contoh dalam tutorial ini akan dilakukan dengan menggunakan Java 7+, Guava, dan Apache Commons IO biasa.

2. Perwakilan ke Sistem Operasi

Salah satu pendekatan yang paling popular digunakan untuk membuat direktori sementara adalah dengan memberikan tujuan ke sistem operasi yang mendasari. Lokasi diberikan oleh harta java.io.tmpdir , dan setiap sistem operasi mempunyai struktur dan rutin pembersihan tersendiri.

Di Java biasa, kami membuat direktori dengan menentukan awalan yang ingin kami ambil direktori:

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

Menggunakan Jambu, prosesnya serupa, tetapi kami tidak dapat menentukan bagaimana kami ingin awalan direktori kami:

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

Apache Commons IO tidak menyediakan cara untuk membuat direktori sementara. Ini menyediakan pembungkus untuk mendapatkan direktori sementara sistem operasi, dan kemudian, kita harus melakukan yang lain:

String tmpDirsLocation = System.getProperty("java.io.tmpdir"); Path path = Paths.get(FileUtils.getTempDirectory().getAbsolutePath(), UUID.randomUUID().toString()); String tmpdir = Files.createDirectories(path).toFile().getAbsolutePath(); assertThat(tmpdir).startsWith(tmpDirsLocation);

Untuk mengelakkan pertembungan nama dengan direktori yang ada, kami menggunakan UUID.randomUUID () untuk membuat direktori dengan nama rawak.

3. Menentukan Lokasi

Kadang-kadang kita perlu menentukan di mana kita mahu membuat direktori sementara kita. Contoh yang baik adalah semasa membina Maven. Oleh kerana kita sudah mempunyai direktori target build "sementara" , kita dapat menggunakan direktori tersebut untuk menempatkan direktori sementara yang mungkin diperlukan oleh build kita:

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

Kedua-dua Jambu Batu dan Apache Commons IO tidak mempunyai kaedah untuk membuat direktori sementara di lokasi tertentu.

Berbaloi dan berkata bahawa itu sasaran direktori boleh berbeza bergantung kepada konfigurasi bina . Salah satu cara untuk membuatnya kalis peluru adalah dengan menyampaikan lokasi direktori sasaran ke JVM yang menjalankan ujian.

Oleh kerana sistem operasi tidak menjaga pembersihan, kita dapat menggunakan File.deleteOnExit () :

tmpdir.toFile().deleteOnExit();

Dengan cara ini, fail akan dipadamkan setelah JVM dihentikan, tetapi hanya jika penamatannya anggun .

4. Menggunakan Atribut Fail yang berbeza

Seperti fail atau direktori lain, mungkin untuk menentukan atribut fail semasa pembuatan direktori sementara. Oleh itu, jika kita ingin membuat direktori sementara yang hanya dapat dibaca oleh pengguna yang membuatnya, kita dapat menentukan kumpulan atribut yang akan mencapai itu:

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

Seperti yang dijangkakan, Guava dan Apache Commons IO tidak menyediakan cara untuk menentukan atribut ketika membuat direktori sementara.

Perlu juga diperhatikan bahawa contoh sebelumnya menganggap kita berada di bawah Sistem Filesy Compliant seperti Unix atau macOS.

Maklumat lebih lanjut mengenai atribut fail terdapat di Panduan kami untuk API Atribut Fail NIO2.

5. Kesimpulan

Dalam tutorial ringkas ini, kami meneroka cara membuat direktori sementara di Java 7+, Guava, dan Apache Commons IO biasa. Kami melihat bahawa Java biasa adalah cara yang paling fleksibel untuk membuat direktori sementara kerana ia menawarkan kemungkinan yang lebih luas sambil mengekalkan keefektifan.

Seperti biasa, semua kod sumber untuk tutorial ini tersedia di GitHub.