Jawa direktoridarirekursifmencari file di
Jawa Di sini kami memperkenalkan contoh program yang secara rekursif mencari file dalam direktori tertentu, termasuk subdirektori, dan memperoleh daftar file yang cocok dengan kondisi pencarian.
Ini melakukan pemrosesan yang sama seperti perintah UNIX ls -R dan perintah Windows dir /s.
Anda juga dapat menentukan * sebagai karakter wildcard dalam nama file yang akan dicari, atau menggunakan ekspresi reguler untuk mencari.
Sebagai contoh penggunaan, pada kasus berikut, pencarian daftar file direktori dilakukan secara rekursif termasuk subdirektori untuk mendapatkan daftar file yang berekstensi java.
File[] file = pencarian.listFiles(“C:/filelist/”, “*.java”);
contoh program
/**
*
*/
Pencarian File kelas publik {
int akhir statis publik TYPE_FILE_OR_DIR = 1;
int akhir statis publik TYPE_FILE = 2;
int akhir statis publik TYPE_DIR = 3;
/**
* Dari direktori yang ditentukan [directoryPath],
* Cari file [fileName] yang akan dicari secara rekursif dan temukan file yang sesuai.
* Mengembalikan daftar objek file.
*
* contoh)
* File[] file =listFiles(“C:/filelist/”, “*.java”);
* Contoh di atas mencari daftar file direktori secara rekursif dan
* Dapatkan daftar file dengan ekstensi java.
*
* @param DirectoryPath Path mewakili direktori yang akan dicari
* @param fileName Nama file yang akan dicari
* Anda dapat menentukan * sebagai karakter wildcard dalam nama file.
* @return Objek file yang cocok dengan pencarian
*/
File publik[] listFiles(Jalur direktori string, Nama file string) {
// Konversikan * sebagai karakter wildcard ke ekspresi reguler
jika (Namafile != null) {
Namafile = Namafile.ganti(“.”, “\\.”);
Namafile = Namafile.ganti(“*”, “.*”);
}
kembalikan listFiles(directoryPath, nama file, TYPE_FILE, true, 0);
}
/**
* Dari direktori tertentu [directoryPath], ditentukan sebagai ekspresi reguler
* Pencarian secara rekursif untuk file yang akan dicari [fileNamePattern],
* Mengembalikan daftar objek file yang berlaku.
*
* Anda juga dapat menggunakan kondisi pencarian untuk menentukan apakah tanggal pembaruan file telah melewati jumlah hari yang ditentukan.
* Dapat ditentukan.
*
* contoh)
* Berkas[] berkas =
* listFiles(“C:/filelist/”, “*.java”,TYPE_FILE, benar, 2);
* Dalam contoh di atas, daftar file direktori dicari secara rekursif dan diperbarui kurang dari 7 hari yang lalu.
* Dapatkan daftar file dengan ekstensi java.
*
* @param DirectoryPath Path mewakili direktori yang akan dicari
* @param fileNamePattern Nama file yang akan dicari [ekspresi reguler]
* @param type Objek file terkait ditentukan oleh [type].
* Berikut ini dapat ditentukan
* TYPE_FILE_OR_DIR・・・File dan direktori
* TYPE_FILE・・・File
* TYPE_DIR・・・Direktori
* @param isRecursive benar untuk mencari secara rekursif
* @param period Mencari file yang tanggal pembaruannya telah melewati jumlah hari yang ditentukan.
*Bisa di atur mau tidaknya
* Tidak berlaku jika 0
* Jika 1 atau lebih, cari file setelah jumlah hari yang ditentukan
* Jika kurang dari -1, cari file yang lebih lama dari jumlah hari yang ditentukan
* @return Objek file yang cocok dengan pencarian
*/
File publik[] listFiles(Jalur direktori string,
String fileNamePattern, tipe int,
boolean isRekursif, int periode) {
File dir = File baru (directoryPath);
jika (!dir.isDirectory()) {
membuang IllegalArgumentException baru
(“Jalur yang ditentukan dalam argumen[” + dir.getAbsolutePath() +
“] bukan direktori.”);
}
File[] file = dir.listFiles();
// keluarannya
for (int i = 0; i < panjang file; i++) {
Berkas berkas = berkas[i];
addFile(ketik, fileNamePattern, set, file, titik);
// Cari secara rekursif dan tambahkan ke daftar secara rekursif jika itu adalah direktori
if (isRekursif && file.isDirectory()) {
listFiles(file.getAbsolutePath(), fileNamePattern,
ketik, isRekursif, titik);
}
}
return (File[]) set.toArray(File baru[set.size()]);
}
private void addFile(tipe int, pencocokan string, set TreeSet,
File file,int titik) {
beralih (ketik) {
kasus TYPE_FILE:
jika (!file.isFile()) {
kembali;
}
merusak;
kasus TYPE_DIR:
jika (!file.isDirectory()) {
kembali;
}
merusak;
}
if (cocok != null && !file.getName().matches(cocok)) {
kembali;
}
// Jika ada spesifikasi apakah jumlah hari yang ditentukan telah berlalu
jika (titik != 0) {
// Tanggal pembaruan file
Tanggal lastModifiedDate = Tanggal baru(file.lastModified());
String lastModifiedDateStr = SimpleDateFormat baru(“yyyyMMdd”)
.format(lastModifiedDate);
// Tanggal yang ditentukan (dihitung dalam milidetik per hari)
panjang satu Hari Waktu = 24L * 60L * 60L * 1000L;
long periodTime = oneDayTime * Math.abs(periode);
Tanggal yang ditunjukTanggal =
Tanggal baru(Sistem.currentTimeMillis() – periodTime);
String yang ditunjukDateStr = SimpleDateFormat baru(“yyyyMMdd”)
.format(Tanggal yang ditunjuk);
jika (titik > 0) {
if (lastModifiedDateStr.compareTo(designatedDateStr) < 0) {
kembali;
}
} kalau tidak {
jika (lastModifiedDateStr.compareTo(designatedDateStr) > 0) {
kembali;
}
}
}
// Simpan dalam daftar jika semua kondisi terpenuhi
set.tambahkan(file);
}
/** Gunakan TreeSet untuk mengurutkan berdasarkan abjad. */
set TreeSet pribadi = TreeSet baru();
/**
* Jika Anda ingin terus menggunakan instance setelah membuatnya, gunakan metode ini.
* Panggilan harus diselesaikan.
* contoh)
* Pencarian FileSearch = Pencarian File baru();
* File[] f1 = pencarian.listFiles(C:/filelist/”, “*.java”);
* pencarian.hapus();
* File[] f2 = pencarian.listFiles(“C:/filelist/”, “*.jsp”);
*/
kekosongan publik jelas(){
set.hapus();
}
}
Hasil eksekusi
Untuk memeriksa contoh program, saya membuat direktori daftar file dan menyiapkan file-file berikut.
Nama file dan tanggal pembaruan ditampilkan.
*Harap dicatat bahwa tanggal saat ini adalah2007/08/18Misalkan saja demikian.
C:\filelist │ aaa.java 2007/08/18 │ bbb.java 2007/08/18 └─dir ccc.java 2007/07/17 ddd.java 2007/08/18 eee.jpg 2007/08/16
◆Contoh eksekusi
System.out.println(“\n●Dapatkan semua file”);
File[] file = pencarian.listFiles(jalur, null);
printFileList(file);
cari.hapus();
System.out.println(“\n●Dapatkan file dengan ekstensi java”);
file = pencarian.listFiles(jalur, “*.java”);
printFileList(file);
cari.hapus();
System.out.println(“\n●Dapatkan semua file dan direktori”);
file = pencarian.listFiles(jalur, null,pencarian.TYPE_FILE_OR_DIR, true, 0);
printFileList(file);
cari.hapus();
System.out.println(“\n●Dapatkan file diperbarui dalam waktu 2 hari dari tanggal sekarang”);
file = pencarian.listFiles(jalur, null,pencarian.TYPE_FILE, true, 2);
printFileList(file);
cari.hapus();
System.out.println(“\n●Dapatkan file lama yang lebih lama dari 30 hari dari tanggal sekarang”);
file = pencarian.listFiles(jalur, null,pencarian.TYPE_FILE, true, -30);
printFileList(file);
cari.hapus();
}
private static void printFileList(File[] files) {
for (int i = 0; i < panjang file; i++) {
Berkas berkas = berkas[i];
Sistem.keluar.println((i + 1) + “: ” + file);
}
}
◆ Hasil keluaran
●Dapatkan semua file 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc.java 4: C:\filelist\dir\ddd.java 5: C:\filelist\dir\eee.jpg ●Dapatkan file dengan ekstensi java 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc .java 4: C:\filelist\dir\ddd.java ●Dapatkan semua file dan direktori 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir 4: C:\filelist \dir\ccc.java 5: C:\filelist\dir\ddd.java 6: C:\filelist\dir\eee.jpg ●File diperbarui dalam waktu 2 hari dari tanggal sekarang Dapatkan 1: C:\filelist\aaa. java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ddd.java 4: C:\filelist\dir\eee.jpg ●Tanggal sekarang Dapatkan file lama lebih dari 30 hari dari 1: C: \filelist\dir\ccc.java