Periksa Jika File atau Direktori Ada di Java

1. Ikhtisar

Dalam tutorial singkat ini, kita akan membiasakan diri dengan berbagai cara untuk memeriksa keberadaan file atau direktori.

Pertama, kita akan mulai dengan NIO API modern dan kemudian akan membahas pendekatan IO lama.

2. Menggunakan java.nio.file.Files

Untuk memeriksa apakah file atau direktori ada, kita dapat memanfaatkan Files.exists (Path) metode . Seperti yang jelas dari tanda tangan metode, pertama-tama kita harus mendapatkan Path ke file atau direktori yang dimaksud. Kemudian kita bisa meneruskan metode Path to the Files.exists (Path) itu :

Path path = Paths.get("does-not-exist.txt"); assertFalse(Files.exists(path));

Karena file tidak ada, itu mengembalikan false . Perlu juga disebutkan bahwa jika metode Files.exists (Path) menemukan IOException , itu akan mengembalikan false juga.

Di sisi lain, ketika file yang diberikan ada, itu akan mengembalikan nilai true seperti yang diharapkan:

Path tempFile = Files.createTempFile("baeldung", "exist-article"); assertTrue(Files.exists(tempFile));

Di sini kami membuat file sementara dan kemudian memanggil metode Files.exists (Path) .

Ini bahkan berfungsi untuk direktori :

Path tempDirectory = Files.createTempDirectory("baeldung-exists"); assertTrue(Files.exists(tempDirectory));

Jika kami secara khusus ingin mengetahui apakah ada file atau direktori, kami juga dapat menggunakan metode Files.isDirectory (Path) atau Files.isRegularFile (Path) :

assertTrue(Files.isDirectory(tempDirectory)); assertFalse(Files.isDirectory(tempFile)); assertTrue(Files.isRegularFile(tempFile));

Ada juga metode notExists (Path) yang mengembalikan nilai true jika Path yang diberikan tidak ada:

assertFalse(Files.notExists(tempDirectory));

Kadang-kadang Files.exists (Path) mengembalikan palsu karena kita tidak memiliki hak akses file yang diperlukan . Dalam skenario seperti itu, kita dapat menggunakan metode Files.isReadable (Path) untuk memastikan file benar-benar dapat dibaca oleh pengguna saat ini:

assertTrue(Files.isReadable(tempFile)); assertFalse(Files.isReadable(Paths.get("/root/.bashrc")));

2.1. Tautan Simbolik

Secara default, metode Files.exists (Path) mengikuti tautan simbolis . Jika file A memiliki tautan simbolis ke file B , maka metode Files.exists (A) mengembalikan nilai true jika dan hanya jika file B sudah ada:

Path target = Files.createTempFile("baeldung", "target"); Path symbol = Paths.get("test-link-" + ThreadLocalRandom.current().nextInt()); Path symbolicLink = Files.createSymbolicLink(symbol, target); assertTrue(Files.exists(symbolicLink));

Sekarang jika kita menghapus target dari tautan tersebut, Files.exists (Path) akan mengembalikan false :

Files.deleteIfExists(target); assertFalse(Files.exists(symbolicLink));

Karena target tautan tidak ada lagi, mengikuti tautan tidak akan mengarah ke apa pun, dan Files.exists (Path) akan mengembalikan false .

Bahkan mungkin untuk tidak mengikuti tautan simbolik dengan meneruskan LinkOption yang sesuai sebagai argumen kedua:

assertTrue(Files.exists(symbolicLink, LinkOption.NOFOLLOW_LINKS));

Karena tautan itu sendiri ada, metode Files.exists (Path) mengembalikan nilai true. Juga, kita dapat memeriksa apakah Path adalah tautan simbolis menggunakan metode Files.isSymbolicLink (Path) :

assertTrue(Files.isSymbolicLink(symbolicLink)); assertFalse(Files.isSymbolicLink(target));

3. Menggunakan java.io.File

Jika kami menggunakan Java 7 atau versi Java yang lebih baru, sangat disarankan untuk menggunakan Java NIO API modern untuk persyaratan semacam ini .

Namun, untuk memastikan jika file atau direktori ada di dunia IO warisan Java, kita dapat memanggil metode existing () pada instance File :

assertFalse(new File("invalid").exists());

Jika file atau direktori sudah ada, itu akan mengembalikan nilai true :

Path tempFilePath = Files.createTempFile("baeldung", "exist-io"); Path tempDirectoryPath = Files.createTempDirectory("baeldung-exists-io"); File tempFile = new File(tempFilePath.toString()); File tempDirectory = new File(tempDirectoryPath.toString()); assertTrue(tempFile.exists()); assertTrue(tempDirectory.exists());

Seperti yang ditunjukkan di atas, metode existing () tidak peduli apakah itu file atau direktori. Oleh karena itu, selama itu ada, itu akan mengembalikan nilai true .

Metode isFile () , bagaimanapun, mengembalikan nilai true jika jalur yang diberikan adalah file yang sudah ada:

assertTrue(tempFile.isFile()); assertFalse(tempDirectory.isFile());

Demikian pula, metode isDirectory () mengembalikan nilai true jika jalur yang diberikan adalah direktori yang sudah ada:

assertTrue(tempDirectory.isDirectory()); assertFalse(tempFile.isDirectory());

Terakhir, metode canRead () mengembalikan nilai true jika file dapat dibaca:

assertTrue(tempFile.canRead()); assertFalse(new File("/root/.bashrc").canRead());

Ketika mengembalikan false , file tersebut tidak ada atau pengguna saat ini tidak memiliki izin baca pada file tersebut.

4. Kesimpulan

Dalam tutorial singkat ini, kami melihat bagaimana memastikan file atau direktori ada di Java. Sepanjang jalan, kami berbicara tentang NIO modern dan IO API lama. Selain itu, kami melihat bagaimana NIO API menangani tautan simbolik.

Seperti biasa, semua contoh tersedia di GitHub.