Temukan File Modifikasi Terakhir dalam Direktori dengan Java

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat lebih dekat bagaimana menemukan file yang terakhir diubah dalam direktori tertentu di Java.

Pertama, kita akan mulai dengan IO lama dan NIO API modern. Kemudian, kita akan melihat bagaimana menggunakan pustaka Apache Commons IO untuk mencapai hal yang sama.

2. Menggunakan API java.io

Paket java.io lama menyediakan kelas File untuk merangkum representasi abstrak dari nama jalur file dan direktori.

Untungnya, kelas File hadir dengan metode praktis yang disebut lastModified (). Metode ini mengembalikan waktu modifikasi terakhir dari file yang dilambangkan dengan nama jalur abstrak .

Sekarang mari kita lihat bagaimana kita dapat menggunakan kelas java.io.File untuk mencapai tujuan yang dimaksudkan:

public static File findUsingIOApi(String sdir) { File dir = new File(sdir); if (dir.isDirectory()) { Optional opFile = Arrays.stream(dir.listFiles(File::isFile)) .max((f1, f2) -> Long.compare(f1.lastModified(), f2.lastModified())); if (opFile.isPresent()){ return opFile.get(); } } return null; }

Seperti yang bisa kita lihat, kita menggunakan Java 8 Stream API untuk melakukan loop melalui array file. Kemudian, kami menjalankan operasi max () untuk mendapatkan file dengan modifikasi terbaru .

Perhatikan bahwa kami menggunakan turunan Opsional untuk merangkum file yang terakhir diubah.

Ingatlah bahwa pendekatan ini dianggap kuno dan ketinggalan zaman. Namun, kami dapat menggunakannya jika kami ingin tetap kompatibel dengan dunia IO warisan Java .

3. Menggunakan satu java.nio API

Pengenalan API NIO merupakan titik balik untuk manajemen sistem file. Versi baru NIO.2 yang dikirimkan di Java 7 hadir dengan serangkaian fitur yang disempurnakan untuk manajemen dan manipulasi file yang lebih baik.

Faktanya, kelas java.nio.file.Files menawarkan fleksibilitas tinggi dalam hal memanipulasi file dan direktori di Java.

Jadi, mari kita lihat bagaimana kita dapat menggunakan kelas Files untuk mendapatkan file yang terakhir diubah dalam sebuah direktori:

public static Path findUsingNIOApi(String sdir) throws IOException { Path dir = Paths.get(sdir); if (Files.isDirectory(dir)) { Optional opPath = Files.list(dir) .filter(p -> !Files.isDirectory(p)) .sorted((p1, p2)-> Long.valueOf(p2.toFile().lastModified()) .compareTo(p1.toFile().lastModified())) .findFirst(); if (opPath.isPresent()){ return opPath.get(); } } return null; }

Mirip dengan contoh pertama, kami mengandalkan Steam API untuk hanya mendapatkan file. Kemudian, kami mengurutkan file kami berdasarkan waktu modifikasi terakhir dengan bantuan ekspresi lambda .

4. Menggunakan Apache Commons IO

Apache Commons IO telah membawa manajemen sistem file ke level berikutnya. Ini menyediakan satu set kelas praktis, pembanding file, filter file, dan banyak lagi.

Untungnya bagi kami, perpustakaan menawarkan kelas LastModifiedFileComparator yang dapat digunakan sebagai pembanding untuk mengurutkan larik file berdasarkan waktu terakhirnya diubah .

Pertama, kita perlu menambahkan ketergantungan commons-io di pom.xml kita :

 commons-io commons-io 2.7 

Terakhir, mari kita tunjukkan cara menemukan file yang terakhir diubah dalam folder menggunakan Apache Commons IO:

public static File findUsingCommonsIO(String sdir) { File dir = new File(sdir); if (dir.isDirectory()) { File[] dirFiles = dir.listFiles((FileFilter)FileFilterUtils.fileFileFilter()); if (dirFiles != null && dirFiles.length > 0) { Arrays.sort(dirFiles, LastModifiedFileComparator.LASTMODIFIED_REVERSE); return dirFiles[0]; } } return null; }

Seperti yang ditunjukkan di atas, kami menggunakan instance tunggal LASTMODIFIED_REVERSE untuk mengurutkan array file kami dalam urutan terbalik .

Karena array diurutkan secara terbalik, maka file yang terakhir diubah adalah elemen pertama dari array.

5. Kesimpulan

Dalam tutorial ini, kami menjelajahi berbagai cara untuk menemukan file yang terakhir diubah dalam direktori tertentu. Sepanjang jalan, kami menggunakan API yang merupakan bagian dari JDK dan pustaka eksternal Apache Commons IO.

Seperti biasa, sumber kode lengkap dari contoh tersedia di GitHub.