Membuat Direktori Sementara di Java

1. Ikhtisar

Direktori sementara berguna ketika kita perlu membuat sekumpulan file yang nantinya dapat kita buang. Saat kita membuat direktori sementara, kita dapat mendelegasikan ke sistem operasi tempat meletakkannya atau menentukan sendiri di mana kita ingin meletakkannya.

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

2. Delegasikan ke Sistem Operasi

Salah satu pendekatan paling populer yang digunakan untuk membuat direktori sementara adalah mendelegasikan tujuan ke sistem operasi yang mendasarinya. Lokasi diberikan oleh properti java.io.tmpdir , dan setiap sistem operasi memiliki struktur dan rutinitas pembersihannya sendiri.

Di Java biasa, kami membuat direktori dengan menentukan awalan yang kami inginkan untuk diambil direktori:

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

Menggunakan Guava, prosesnya serupa, tetapi kami tidak dapat menentukan bagaimana kami ingin mengawali 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, terserah kita untuk melakukan sisanya:

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 menghindari bentrokan nama dengan direktori yang ada, kami menggunakan UUID.randomUUID () untuk membuat direktori dengan nama acak.

3. Menentukan Lokasi

Terkadang kita perlu menentukan di mana kita ingin membuat direktori sementara kita. Contoh yang bagus adalah selama pembuatan Maven. Karena kita sudah memiliki direktori target build "sementara" , kita dapat menggunakan direktori itu untuk menempatkan direktori sementara yang mungkin dibutuhkan oleh build kita:

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

Baik Guava dan Apache Commons IO tidak memiliki metode untuk membuat direktori sementara di lokasi tertentu.

Itu perlu dicatat bahwa dengan sasaran direktori dapat berbeda tergantung pada konfigurasi membangun . Salah satu cara untuk membuatnya anti peluru adalah dengan meneruskan lokasi direktori target ke JVM yang menjalankan pengujian.

Karena sistem operasi tidak menangani pembersihan, kita dapat menggunakan File.deleteOnExit () :

tmpdir.toFile().deleteOnExit();

Dengan cara ini, file akan dihapus setelah JVM dihentikan, tetapi hanya jika pengakhiran berjalan lancar .

4. Menggunakan Atribut File Berbeda

Seperti file atau direktori lain, dimungkinkan untuk menentukan atribut file setelah pembuatan direktori sementara. Jadi, jika kita ingin membuat direktori sementara yang hanya bisa dibaca oleh pengguna yang membuatnya, kita bisa menentukan set atribut yang akan melakukannya:

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 diharapkan, Guava dan Apache Commons IO tidak menyediakan cara untuk menentukan atribut saat membuat direktori sementara.

Perlu juga dicatat bahwa contoh sebelumnya mengasumsikan kita berada di bawah Sistem File yang Mendukung Posix seperti Unix atau macOS.

Informasi selengkapnya tentang atribut file dapat ditemukan di Panduan kami untuk API Atribut File NIO2.

5. Kesimpulan

Dalam tutorial singkat ini, kami membahas cara membuat direktori sementara di Java 7+, Guava, dan Apache Commons IO biasa. Kami melihat bahwa Java biasa adalah cara paling fleksibel untuk membuat direktori sementara karena ia menawarkan kemungkinan yang lebih luas sambil menjaga verbositas seminimal mungkin.

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