ชวา ไดเรกทอรีจากซ้ำค้นหาไฟล์ใน
ชวา ที่นี่เราขอแนะนำโปรแกรมตัวอย่างที่ค้นหาไฟล์ในไดเร็กทอรีที่ระบุแบบวนซ้ำ รวมถึงไดเร็กทอรีย่อย และรับรายการไฟล์ที่ตรงกับเงื่อนไขการค้นหา
สิ่งเหล่านี้ดำเนินการประมวลผลเดียวกันกับคำสั่ง UNIX ls -R และคำสั่ง Windows dir /s
คุณยังสามารถระบุ * เป็นอักขระตัวแทนในชื่อไฟล์เพื่อค้นหา หรือใช้นิพจน์ทั่วไปเพื่อค้นหา
เป็นตัวอย่างการใช้งาน ในกรณีต่อไปนี้ รายการไฟล์ไดเร็กทอรีจะถูกค้นหาซ้ำๆ รวมถึงไดเร็กทอรีย่อยเพื่อรับรายการไฟล์ที่มีนามสกุล java
ไฟล์ [] files = search.listFiles (“C:/filelist/”, “*.java”);
โปรแกรมตัวอย่าง
/**
*
*/
FileSearch ระดับสาธารณะ {
สาธารณะคงสุดท้าย int TYPE_FILE_OR_DIR = 1;
สาธารณะคงสุดท้าย int TYPE_FILE = 2;
สาธารณะคงสุดท้าย int TYPE_DIR = 3;
/**
* จากไดเร็กทอรีที่ระบุ [directoryPath]
* ค้นหาไฟล์ [ชื่อไฟล์] ที่จะค้นหาซ้ำและค้นหาไฟล์ที่เกี่ยวข้อง
* ส่งคืนรายการวัตถุไฟล์
*
* ตัวอย่าง)
* ไฟล์[] ไฟล์ =listFiles(“C:/filelist/”, “*.java”);
* ตัวอย่างข้างต้นค้นหารายการไฟล์ไดเร็กทอรีแบบวนซ้ำและ
* รับรายการไฟล์ที่มีนามสกุล java
*
* @param directoryPath Path แสดงถึงไดเร็กทอรีที่จะค้นหา
* @param fileName ชื่อไฟล์ที่ต้องการค้นหา
* คุณสามารถระบุ * เป็นอักขระตัวแทนในชื่อไฟล์ได้
* @return วัตถุไฟล์ที่ตรงกับการค้นหา
*/
ไฟล์สาธารณะ [] listFiles (String directoryPath, String fileName) {
// แปลง * เป็นอักขระตัวแทนเป็นนิพจน์ทั่วไป
ถ้า (ชื่อไฟล์ != null) {
fileName = fileName.replace(“.”, “\\.”);
fileName = fileName.replace(“*”, “.*”);
}
ส่งคืน listFiles (directoryPath, ชื่อไฟล์, TYPE_FILE, จริง, 0);
}
/**
* จากไดเร็กทอรีที่ระบุ [directoryPath] ระบุเป็นนิพจน์ทั่วไป
* ค้นหาซ้ำสำหรับไฟล์ที่จะค้นหา [fileNamePattern]
* ส่งคืนรายการวัตถุไฟล์ที่เกี่ยวข้อง
*
* คุณยังสามารถใช้เงื่อนไขการค้นหาเพื่อตรวจสอบว่าวันที่อัพเดตไฟล์เกินจำนวนวันที่ระบุหรือไม่
* สามารถระบุได้
*
* ตัวอย่าง)
* ไฟล์[] ไฟล์ =
* listFiles(“C:/filelist/”, “*.java”,TYPE_FILE, จริง, 2);
* ในตัวอย่างข้างต้น รายการไฟล์ไดเร็กทอรีจะถูกค้นหาซ้ำและอัปเดตไม่เกิน 7 วันที่ผ่านมา
* รับรายการไฟล์ที่มีนามสกุล java
*
* @param directoryPath Path แสดงถึงไดเร็กทอรีที่จะค้นหา
* @param fileNamePattern ชื่อไฟล์เพื่อค้นหา [นิพจน์ปกติ]
* ประเภท @param วัตถุไฟล์ที่เกี่ยวข้องถูกระบุโดย [ประเภท]
* สามารถระบุได้ดังต่อไปนี้
* TYPE_FILE_OR_DIR・・・ไฟล์และไดเร็กทอรี
* TYPE_FILE・・・ไฟล์
* TYPE_DIR・・・ไดเร็กทอรี
* @param isRecursive true สำหรับการค้นหาแบบเรียกซ้ำ
* ช่วง @param ค้นหาไฟล์ที่วันที่อัพเดตเกินจำนวนวันที่กำหนด
* สามารถกำหนดได้ว่าต้องการหรือไม่
* ใช้ไม่ได้ถ้า 0
* หากมีตั้งแต่ 1 ไฟล์ขึ้นไป ให้ค้นหาไฟล์หลังจากครบจำนวนวันที่กำหนด
* หากน้อยกว่า -1 ให้ค้นหาไฟล์ที่เก่ากว่าจำนวนวันที่กำหนด
* @return วัตถุไฟล์ที่ตรงกับการค้นหา
*/
ไฟล์สาธารณะ [] listFiles (String directoryPath,
สตริง fileNamePattern, ประเภท int,
บูลีน isRecursive ระยะเวลา int) {
ไฟล์ dir = ไฟล์ใหม่ (directoryPath);
ถ้า (!dir.isDirectory()) {
โยน IllegalArgumentException ใหม่
(“เส้นทางที่ระบุในอาร์กิวเมนต์[” + dir.getAbsolutePath() +
“] ไม่ใช่ไดเรกทอรี”);
}
ไฟล์ [] ไฟล์ = dir.listFiles ();
// เอาท์พุทของมัน
สำหรับ (int i = 0; i < files.length; i++) {
ไฟล์ ไฟล์ = ไฟล์ [i];
addFile(ประเภท, fileNamePattern, ชุด, ไฟล์, จุด);
// ค้นหาซ้ำและเพิ่มในรายการซ้ำหากเป็นไดเร็กทอรี
ถ้า (isRecursive && file.isDirectory()) {
listFiles (file.getAbsolutePath (), ชื่อไฟล์รูปแบบ,
ประเภท, isRecursive, ระยะเวลา);
}
}
return (ไฟล์[]) set.toArray(ไฟล์ใหม่[set.size()]);
}
addFile เป็นโมฆะส่วนตัว (ประเภท int, การจับคู่สตริง, ชุด TreeSet,
ไฟล์ไฟล์ช่วงเวลา int) {
สวิตช์ (ประเภท) {
กรณี TYPE_FILE:
ถ้า (!file.isFile()) {
กลับ;
}
หยุดพัก;
กรณี TYPE_DIR:
ถ้า (!file.isDirectory()) {
กลับ;
}
หยุดพัก;
}
ถ้า (ตรงกัน != null && !file.getName().matches(ตรงกัน)) {
กลับ;
}
// หากมีข้อกำหนดว่าผ่านจำนวนวันที่ระบุหรือไม่
ถ้า (จุด != 0) {
// วันที่อัพเดตไฟล์
วันที่ LastModifiedDate = วันที่ใหม่ (file.lastModified());
สตริง LastModifiedDateStr = SimpleDateFormat ใหม่ (“yyyyMMdd”)
.format(lastModifiedDate);
// วันที่ระบุ (คำนวณเป็นมิลลิวินาทีต่อวัน)
ยาวหนึ่งวัน = 24L * 60L * 60L * 1,000L;
ระยะเวลานาน = oneDayTime * Math.abs (งวด);
วันที่กำหนดDate =
วันที่ใหม่ (System.currentTimeMillis() – periodTime);
สตริงที่กำหนดDateStr = ใหม่ SimpleDateFormat("yyyyMMdd")
.format(วันที่กำหนด);
ถ้า (จุด > 0) {
ถ้า (lastModifiedDateStr.compareTo (designatedDateStr) < 0) {
กลับ;
}
} อื่น {
ถ้า (lastModifiedDateStr.compareTo (designatedDateStr) > 0) {
กลับ;
}
}
}
// จัดเก็บในรายการหากตรงตามเงื่อนไขทั้งหมด
set.add(ไฟล์);
}
/** ใช้ TreeSet เพื่อจัดเรียงตามตัวอักษร */
ชุด TreeSet ส่วนตัว = TreeSet ใหม่ ();
/**
* หากคุณต้องการใช้อินสแตนซ์ต่อหลังจากสร้างแล้ว ให้ใช้วิธีนี้
* การโทรจะต้องถูกล้าง
* ตัวอย่าง)
* ค้นหา FileSearch = FileSearch ใหม่ ();
* ไฟล์[] f1 = search.listFiles(C:/filelist/”, “*.java”);
* ค้นหา.ชัดเจน();
* ไฟล์[] f2 = search.listFiles(“C:/filelist/”, “*.jsp”);
*/
โมฆะสาธารณะชัดเจน () {
ชุด.ชัดเจน();
}
}
ผลการดำเนินการ
เพื่อตรวจสอบโปรแกรมตัวอย่าง ฉันได้สร้างไดเร็กทอรีรายการไฟล์และเตรียมไฟล์ต่อไปนี้
ชื่อไฟล์และวันที่อัพเดตจะแสดงขึ้น
*โปรดทราบว่าวันที่ปัจจุบันคือ2007/08/18สมมุติว่าเป็นเช่นนั้น
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
◆ตัวอย่างการดำเนินการ
System.out.println(“\n●รับไฟล์ทั้งหมด”);
ไฟล์ [] = search.listFiles (เส้นทาง, null);
printFileList(ไฟล์);
ค้นหา.ชัดเจน();
System.out.println(“\n●รับไฟล์ที่มีนามสกุล java”);
files = search.listFiles (เส้นทาง “*.java”);
printFileList(ไฟล์);
ค้นหา.ชัดเจน();
System.out.println(“\n●รับไฟล์และไดเร็กทอรีทั้งหมด”);
files = search.listFiles (พาธ, null, search.TYPE_FILE_OR_DIR, จริง, 0);
printFileList(ไฟล์);
ค้นหา.ชัดเจน();
System.out.println(“\n●รับไฟล์ที่อัปเดตภายใน 2 วันนับจากวันที่ปัจจุบัน”);
files = search.listFiles (พาธ, null, search.TYPE_FILE, จริง, 2);
printFileList(ไฟล์);
ค้นหา.ชัดเจน();
System.out.println(“\n●รับไฟล์เก่าที่เก่ากว่า 30 วันนับจากวันที่ปัจจุบัน”);
files = search.listFiles (พาธ, null, search.TYPE_FILE, จริง, -30);
printFileList(ไฟล์);
ค้นหา.ชัดเจน();
}
โมฆะคงที่ส่วนตัว printFileList (ไฟล์ []) {
สำหรับ (int i = 0; i < files.length; i++) {
ไฟล์ ไฟล์ = ไฟล์ [i];
System.out.println((i + 1) + “: ” + ไฟล์);
}
}
◆ผลลัพธ์เอาท์พุต
●รับไฟล์ทั้งหมด 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 ●รับไฟล์ที่มีนามสกุล java 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc .java 4: C:\filelist\dir\ddd.java ●รับไฟล์และไดเร็กทอรีทั้งหมด 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 ●ไฟล์อัปเดตภายใน 2 วันนับจากวันที่ปัจจุบัน รับ 1: C:\filelist\aaa. java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ddd.java 4: C:\filelist\dir\eee.jpg ●วันที่ปัจจุบัน รับไฟล์เก่าที่เก่ากว่า 30 วันจาก 1: C: \filelist\dir\ccc.java