Cách tốt nhất để tìm một thư mục có tên cụ thể trong Java là gì? Thư mục mà tôi đang tìm kiếm có thể được đặt trong thư mục hiện tại hoặc một trong các thư mục con của nó.Tìm kiếm đệ quy một thư mục trong Java
Trả lời
giải pháp của bạn sẽ bao gồm việc sử dụng các File.listFiles(String)
Cảm ơn Andrew. Tôi bị hạn chế 1.6, nhưng tôi quên rằng những người khác thì không. – MadcoreTom
* "Tôi bị ràng buộc 1.6" * Tôi cũng vậy (trừ khi tôi quay trở lại 1.5 dev hoặc hơn thế nữa). May mắn những tài liệu đó. có thẻ '@ since' và trình biên dịch có các tùy chọn biên dịch chéo như 'kiểm tra axit' về khả năng tương thích phiên bản. Tôi sẽ liên kết với các tài liệu Java mới nhất ngay cả khi mọi người đề cập đến họ đang phát triển cho Java 1.3. ;) –
Divide và chinh phục? Một cách tiếp cận ngây thơ: Đối với mỗi thư mục, bạn có thể bắt đầu một nhiệm vụ, nó như sau:
- danh sách tất cả các thư mục
- nếu danh sách chứa một thư mục phù hợp, in và thoát khỏi ứng dụng
- bắt đầu một nhiệm vụ cho mọi thư mục.
Để đi bộ cây tệp, giao diện FileVisitor có thể được sử dụng. Vui lòng xem tutorial. Vui lòng xem số Find sample codes.
Đây là giải pháp tốt hơn so với #listFiles của @ MadcoreTom vì nó cho phép bạn chấm dứt việc đi bộ khi tệp được tìm thấy. – Kong
Cái gì như:
public static final File findIt(File rootDir, String fileName) {
File[] files = rootDir.listFiles();
List<File> directories = new ArrayList<File>(files.length);
for (File file : files) {
if (file.getName().equals(fileName)) {
return file;
} else if (file.isDirectory()) {
directories.add(file);
}
}
for (File directory : directories) {
File file = findIt(directory);
if (file != null) {
return file;
}
}
return null;
}
Như bạn đề cập đệ quy nên phục vụ cho yêu cầu này
import java.io.File;
public class CheckFile {
private static boolean foundFolder = false;
public static void main(String[] args) {
File dir = new File("currentdirectory");
findDirectory(dir);
}
private static void findDirectory(File parentDirectory) {
if(foundFolder) {
return;
}
File[] files = parentDirectory.listFiles();
for (File file : files) {
if (file.isFile()) {
continue;
}
if (file.getName().equals("folderNameToFind")) {
foundFolder = true;
break;
}
if(file.isDirectory()) {
findDirectory(file);
}
}
}
}
Tôi có chính xác rằng phương pháp này không thể tái sử dụng được (chuyển nó sang một lớp tiện ích nào đó không hoạt động) tức là nó có thể phát hiện thư mục chỉ một lần và một lần 'phát hiện' được tìm thấy sẽ vẫn đúng? –
Trong Java 8 thông qua streams API:
Optional<Path> hit = Files.walk(myPath)
.filter(file -> file.getFileName().equals(myName))
.findAny();
CáC#walk là lười biếng, vì vậy bất kỳ short-circuiting terminal operation sẽ tối ưu hóa yêu cầu IO.
So sánh 'java.nio.Path' từ' Path.getFileName' với 'Chuỗi'. Tôi đề nghị 'file.getFileName(). ToFile.getName()' biết rằng điều này có vẻ phức tạp, có thể tốn kém. –
Hoặc, bạn nên sử dụng khái niệm đệ quy tìm kiếm tập tin cho đến khi nó tìm thấy: Đây là Code:
String name; //to hold the search file name
public String listFolder(File dir) {
int flag;
File[] subDirs = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
System.out.println("File of Directory: " + dir.getAbsolutePath());
flag = Listfile(dir);
if (flag == 0) {
System.out.println("File Found in THe Directory: " + dir.getAbsolutePath());
Speak("File Found in THe Directory: !!" + dir.getAbsolutePath());
return dir.getAbsolutePath();
}
for (File folder : subDirs) {
listFolder(folder);
}
return null;
}
private int Listfile(File dir) {
boolean ch = false;
File[] files = dir.listFiles();
for (File file : files) {
Listfile(file);
if (file.getName().indexOf(name.toLowerCase()) != -1) {//check all in lower case
System.out.println(name + "Found Sucessfully!!");
ch = true;
}
}
if (ch) {
return 1;
} else {
return 0;
}
}
- 1. Tìm kiếm tập tin trong thư mục đệ quy
- 2. Tìm kiếm tệp đệ quy
- 3. MEF tìm kiếm plugin đệ quy
- 4. Mongodb đệ quy tìm kiếm
- 5. Tìm kiếm tệp đệ quy bằng PowerShell
- 6. Đệ quy tạo thư mục
- 7. Java - Tìm kiếm tệp trong thư mục
- 8. Tìm kiếm thư mục con đệ quy và trả về tệp trong danh sách python
- 9. Cây tìm kiếm nhị phân đệ quy
- 10. TCL: Tìm kiếm đệ quy các thư mục con để nguồn tất cả các tệp .tcl
- 11. Tạo ánh xạ XML của tìm kiếm thư mục đệ quy
- 12. Làm cách nào để tìm kiếm một từ trong toàn bộ dự án/thư mục một cách đệ quy?
- 13. Làm thế nào để loại trừ một thư mục trong một tìm kiếm đệ quy bằng grep?
- 14. Làm thế nào tôi có thể tìm kiếm và thay thế đệ quy trong một thư mục trong Vim?
- 15. PHP đường dẫn thư mục đệ quy
- 16. Tìm kiếm đệ quy một chuỗi trên windows OS
- 17. Đệ quy đổi tên thư mục trong bash
- 18. gdb tìm kiếm thư mục nguồn
- 19. Thư mục đệ quy Python đọc
- 20. Làm thế nào để giới hạn chiều sâu của một thư mục con tìm kiếm đệ quy
- 21. Đệ quy nhận kích thước của một thư mục
- 22. Làm cách nào để tìm tập tin đệ quy trong các thư mục
- 23. Tìm kiếm tệp trong thư mục có nhiều thư mục
- 24. Grep loại trừ thư mục và tìm kiếm bằng linux
- 25. Xóa đệ quy các tệp và thư mục trong C#
- 26. Thực hiện đệ quy trong các thư mục con
- 27. Đọc các tệp Android.mk trong thư mục con đệ quy
- 28. Tìm kiếm đệ quy cho một nút trong cây không phải nhị phân
- 29. Thư mục Zip đệ quy, lưu cho một thư mục con đã cho (Linux)
- 30. bash lặp qua tất cả tìm đệ quy trong thư mục con
[? Bạn đã thử gì] (http://www.whathaveyoutried.com/) Hay đúng hơn, các lý thuyết của bạn dựa trên việc thử nghiệm các phương pháp tốt nhất 2 (nhún vai) mà bạn có thể nghĩ ra là gì? Hay câu hỏi này thực sự có nghĩa là "Bạn có thể đưa tôi mã codez không?"? –