Java danh mụctừđệ quytìm kiếm tập tin trong
Java Ở đây chúng tôi giới thiệu một chương trình mẫu tìm kiếm đệ quy các tệp trong một thư mục được chỉ định, bao gồm các thư mục con và nhận được danh sách các tệp phù hợp với điều kiện tìm kiếm.
Chúng thực hiện quá trình xử lý tương tự như lệnh UNIX ls -R và lệnh Windows dir /s.
Bạn cũng có thể chỉ định * làm ký tự đại diện trong tên tệp cần tìm kiếm hoặc sử dụng biểu thức thông thường để tìm kiếm.
Như một ví dụ về cách sử dụng, trong trường hợp sau, danh sách tệp thư mục được tìm kiếm đệ quy bao gồm các thư mục con để lấy danh sách các tệp có phần mở rộng java.
File[] files = search.listFiles(“C:/filelist/”, “*.java”);
chương trình mẫu
/**
*
*/
lớp công khai Tìm kiếm tệp {
chung kết tĩnh int TYPE_FILE_OR_DIR = 1;
chung kết tĩnh int TYPE_FILE = 2;
công khai tĩnh cuối cùng TYPE_DIR = 3;
/**
* Từ thư mục được chỉ định [directoryPath],
* Tìm kiếm file [fileName] cần tìm đệ quy và tìm file tương ứng.
* Trả về danh sách các đối tượng tập tin.
*
* ví dụ)
* File[] files =listFiles(“C:/filelist/”, “*.java”);
* Ví dụ trên tìm kiếm danh sách tập tin thư mục một cách đệ quy và
* Nhận danh sách các tệp có phần mở rộng java.
*
* @param folderPath Đường dẫn đại diện cho thư mục cần tìm kiếm
* @param fileName Tên tệp cần tìm kiếm
* Bạn có thể chỉ định * làm ký tự đại diện trong tên tệp.
* @return Đối tượng tệp phù hợp với tìm kiếm
*/
public File[] listFiles(String folderPath, String fileName) {
// Chuyển * dưới dạng ký tự đại diện thành biểu thức chính quy
if (tên tệp != null) {
fileName = fileName.replace(“.”, “\\.”);
fileName = fileName.replace(“*”, “.*”);
}
trả về listFiles(directoryPath, fileName, TYPE_FILE, true, 0);
}
/**
* Từ thư mục được chỉ định [directoryPath], được chỉ định dưới dạng biểu thức chính quy
* Tìm kiếm đệ quy tệp cần tìm kiếm [fileNamePattern],
* Trả về danh sách các đối tượng tệp có thể áp dụng.
*
* Bạn cũng có thể sử dụng điều kiện tìm kiếm để xác định xem ngày cập nhật của tệp có vượt quá số ngày được chỉ định hay không.
* Có thể được chỉ định.
*
* ví dụ)
* Tập tin[] tập tin =
* listFiles(“C:/filelist/”, “*.java”,TYPE_FILE, true, 2);
* Trong ví dụ trên, danh sách tập tin thư mục được tìm kiếm đệ quy và cập nhật cách đây chưa đầy 7 ngày.
* Lấy danh sách các tập tin có phần mở rộng java.
*
* @param folderPath Đường dẫn đại diện cho thư mục cần tìm kiếm
* @param fileNamePattern Tên tệp để tìm kiếm [biểu thức chính quy]
* @param type Đối tượng tệp tương ứng được chỉ định bởi [type].
* Có thể chỉ định những điều sau đây
* TYPE_FILE_OR_DIR・・・Tệp và thư mục
* TYPE_FILE・・・Tệp
* TYPE_DIR・・・Thư mục
* @param isRecursive true để tìm kiếm đệ quy
* @param Period Tìm kiếm các tệp có ngày cập nhật đã vượt quá số ngày được chỉ định.
* Có thể thiết lập hay không
* Không áp dụng nếu 0
* Nếu 1 hoặc nhiều hơn, tìm kiếm tệp sau số ngày được chỉ định
* Nếu nhỏ hơn -1, tìm kiếm các tệp cũ hơn số ngày được chỉ định
* @return Đối tượng tệp phù hợp với tìm kiếm
*/
Tệp công khai[] listFiles(Chuỗi thư mụcĐường dẫn,
Chuỗi fileNamePattern, kiểu int,
boolean isRecursive, int Period) {
Tệp dir = Tệp mới (thư mụcPath);
if (!dir.isDirectory()) {
ném IllegalArgumentException mới
(“Đường dẫn được chỉ định trong đối số[” + dir.getAbsolutePath() +
“] không phải là một thư mục.”);
}
Tệp [] tệp = dir.listFiles();
// đầu ra của nó
for (int i = 0; i < files.length; i++) {
Tệp tệp = tệp [i];
addFile(type, fileNamePattern, set, file, Period);
// Tìm kiếm đệ quy và thêm vào danh sách đệ quy nếu đó là một thư mục
if (isRecursive && file.isDirectory()) {
listFiles(file.getAbsolutePath(), fileNamePattern,
loại, isRecursive, dấu chấm);
}
}
return (File[]) set.toArray(new File[set.size()]);
}
void void addFile(int type, String match, TreeSet set,
Tệp tệp, dấu chấm int) {
công tắc (loại) {
trường hợp TYPE_FILE:
nếu (!file.isFile()) {
trở lại;
}
phá vỡ;
trường hợp TYPE_DIR:
if (!file.isDirectory()) {
trở lại;
}
phá vỡ;
}
if (match != null && !file.getName().matches(match)) {
trở lại;
}
// Nếu có thông số kỹ thuật xem số ngày được chỉ định đã trôi qua chưa
nếu (dấu chấm != 0) {
// Ngày cập nhật tệp
Ngày LastModifiedDate = Ngày mới(file.lastModified());
Chuỗi LastModifiedDateStr = new SimpleDateFormat(“yyyyMMdd”)
.format(lastModifiedDate);
// Ngày được chỉ định (tính bằng mili giây mỗi ngày)
thời gian một ngày dài = 24L * 60L * 60L * 1000L;
thời gian dàiTime = oneDayTime * Math.abs(thời gian);
Ngày được chỉ địnhNgày =
Ngày mới (System.currentTimeMillis() – PeriodTime);
Chuỗi được chỉ địnhDateStr = new SimpleDateFormat(“yyyyMMdd”)
.format(ngày chỉ định);
nếu (dấu chấm > 0) {
if (lastModifiedDateStr.compareTo(designatedDateStr) < 0) {
trở lại;
}
} khác {
if (lastModifiedDateStr.compareTo(designatedDateStr) > 0) {
trở lại;
}
}
}
// Lưu vào danh sách nếu đủ điều kiện
set.add(tập tin);
}
/** Sử dụng TreeSet để sắp xếp theo thứ tự abc. */
tập TreeSet riêng = TreeSet mới();
/**
* Nếu bạn muốn tiếp tục sử dụng phiên bản sau khi tạo nó, hãy sử dụng phương pháp này.
* Cuộc gọi phải được xóa.
* ví dụ)
* Tìm kiếm FileSearch = FileSearch mới();
* Tệp[] f1 = search.listFiles(C:/filelist/”, “*.java”);
* tìm kiếm.clear();
* File[] f2 = search.listFiles(“C:/filelist/”, “*.jsp”);
*/
khoảng trống công khai rõ ràng () {
set.clear();
}
}
Kết quả thực hiện
Để kiểm tra chương trình mẫu, tôi đã tạo một thư mục danh sách tệp và chuẩn bị các tệp sau.
Tên tập tin và ngày cập nhật được hiển thị.
*Xin lưu ý rằng ngày hiện tại là2007/08/18Giả sử như vậy.
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
◆Ví dụ thực thi
System.out.println(“\n●Lấy tất cả các tập tin”);
File[] files = search.listFiles(path, null);
printFileList(file);
tìm kiếm.clear();
System.out.println(“\n●Nhận file có đuôi java”);
files = search.listFiles(path, “*.java”);
printFileList(file);
tìm kiếm.clear();
System.out.println(“\n●Lấy tất cả các tập tin và thư mục”);
tập tin = search.listFiles(path, null,search.TYPE_FILE_OR_DIR, true, 0);
printFileList(file);
tìm kiếm.clear();
System.out.println(“\n●Nhận các tập tin được cập nhật trong vòng 2 ngày kể từ ngày hiện tại”);
files = search.listFiles(path, null,search.TYPE_FILE, true, 2);
printFileList(file);
tìm kiếm.clear();
System.out.println(“\n●Lấy các tập tin cũ hơn 30 ngày kể từ ngày hiện tại”);
files = search.listFiles(path, null,search.TYPE_FILE, true, -30);
printFileList(file);
tìm kiếm.clear();
}
riêng tư tĩnh void printFileList(File[] files) {
for (int i = 0; i < files.length; i++) {
Tệp tệp = tệp [i];
System.out.println((i + 1) + “: ” + file);
}
}
◆Kết quả đầu ra
●Nhận tất cả các tệp 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 ●Nhận tệp có phần mở rộng java 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc .java 4: C:\filelist\dir\ddd.java ●Lấy tất cả các tập tin và thư mục 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 ●Các tệp được cập nhật trong vòng 2 ngày kể từ ngày hiện tại Nhận 1: C:\filelist\aaa. java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ddd.java 4: C:\filelist\dir\eee.jpg ●Ngày hiện tại Nhận các tệp cũ hơn 30 ngày kể từ 1: C: \filelist\dir\ccc.java