Ada pertanyaan serupa lainnya untuk saya di StackOverflow ( Bagaimana cara mendapatkan tanggal pembuatan file di Java ), tetapi jawabannya tidak benar-benar ada karena OP memiliki kebutuhan berbeda yang dapat diselesaikan melalui mekanisme lain. Saya mencoba membuat daftar file dalam direktori yang dapat diurutkan berdasarkan usia, oleh karena itu diperlukan tanggal pembuatan file.
Saya belum menemukan cara yang baik untuk melakukan ini setelah banyak penjelajahan web. Apakah ada mekanisme untuk mendapatkan tanggal pembuatan file?
BTW, saat ini menggunakan sistem Windows, mungkin membutuhkan ini untuk bekerja pada sistem Linux juga. Selain itu, saya tidak dapat menjamin bahwa konvensi penamaan file akan diikuti di mana tanggal / waktu pembuatan disematkan dalam nama.
sumber
Jawaban:
Java nio memiliki opsi untuk mengakses creationTime dan meta-data lainnya selama sistem berkas menyediakannya. Periksa link ini keluar
Misalnya (Disediakan berdasarkan komentar @ ydaetskcoR):
sumber
readAttributes(file.toPath(), BasicFileAttributes.class)
lagi yang Anda dapatkan:no suitable method found for readAttributes(File,Class<BasicFileAttributes>) method Files.<A>readAttributes(Path,Class<A>,LinkOption...) is not applicable (cannot infer type-variable(s) A (argument mismatch; File cannot be converted to Path))
statx
syscall ditambahkan di versi kernel Linux yang lebih baru.Saya telah memecahkan masalah ini menggunakan JDK 7 dengan kode ini:
sumber
Sebagai tindak lanjut dari pertanyaan ini - karena secara khusus berkaitan dengan waktu pembuatan dan membahas cara mendapatkannya melalui kelas nio baru - tampaknya saat ini dalam implementasi JDK7 Anda kurang beruntung. Tambahan: perilaku yang sama ada di OpenJDK7.
Pada sistem file Unix Anda tidak dapat mengambil stempel waktu pembuatan, Anda cukup mendapatkan salinan waktu modifikasi terakhir. Sedih sekali, tapi sayangnya benar. Saya tidak yakin mengapa itu tetapi kode secara khusus melakukan itu seperti yang akan ditunjukkan berikut ini.
sumber
stat
tidak berhasil. Kecuali jika Anda menjalankan kernel lebih tinggi dari 4.11 dengan glibc lebih tinggi dari 2.28, dan coreutils lebih tinggi dari 8.31, makastat
akan melaporkan kelahiran file. Lihat jawaban terkait unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/… Saat ini JDK tidak menggunakan statx syscal.Ini adalah contoh dasar bagaimana mendapatkan tanggal pembuatan file
Java
, menggunakanBasicFileAttributes
class:sumber
API
java.io.File
hanya mendukung mendapatkan waktu modifikasi terakhir . Dan Internet juga sangat diam tentang topik ini.Kecuali jika saya melewatkan sesuatu yang penting, pustaka Java apa adanya (hingga tetapi belum termasuk Java 7) tidak menyertakan kemampuan ini. Jadi jika Anda putus asa untuk ini, salah satu solusinya adalah menulis beberapa kode C (++) untuk memanggil rutinitas sistem dan menyebutnya menggunakan JNI. Sebagian besar pekerjaan ini tampaknya sudah dilakukan untuk Anda di perpustakaan yang disebut JNA .
Anda mungkin masih perlu melakukan sedikit pengkodean khusus OS di Java untuk ini, karena Anda mungkin tidak akan menemukan panggilan sistem yang sama tersedia di Windows dan Unix / Linux / BSD / OS X.
sumber
File
kelas tidak memiliki kemampuan ini adalah karena kebanyakan sistem file tidak melacak informasi ini. Dan yang tidak selalu setuju kapan harus diperbarui.touch
untuk mengubah waktu mod dan kemudian memeriksa lagi.Pada sistem Windows, Anda dapat menggunakan pustaka FileTimes gratis .
Ini akan lebih mudah di masa mendatang dengan Java NIO.2 (JDK 7) dan paket java.nio.file.attribute .
Namun perlu diingat bahwa sebagian besar sistem file Linux tidak mendukung stempel waktu pembuatan file .
sumber
di java1.7 + Anda dapat menggunakan kode ini untuk mendapatkan waktu pembuatan file!
sumber
Instant.ofEpochMilli(date)
. Terima kasih