2015-01-03 15 views
5

Từ cuốn sách của "Kathy Sierra Bert Bates" cho kỳ thi OCP tôi thấy đoạn mã sauGlob mô hình sử dụng getPathMatcher

public class FileTest { 

    public static void matches(Path path, String glob){ 
     PathMatcher matcher = FileSystems.getDefault().getPathMatcher(glob); 
     System.out.println(matcher.matches(path)); 
    } 
    public static void main(String[] args) throws IOException { 
     Path path = Paths.get("/com/java/One.java"); 
     matches(path, "glob:*.java"); 
     matches(path, "glob:**/*.java"); 
     matches(path, "glob:*"); 
     matches(path, "glob:**"); 

    } 
} 

Output:

false 
true 
false 
true 

Tôi không thể hiểu được đầu ra rõ ràng. Có ai giải thích cho tôi không. cho tôi biết ví dụ của tôi những gì đang vượt qua ranh giới thư mục. Cảm ơn Rocky

+2

tôi không lấy đầu ra mà bạn đã cung cấp cho đường dẫn đầu vào. Nhưng tôi nhận được đầu ra của bạn khi tôi chỉ cần vượt qua tên tập tin - 'Paths.get (" One.java ")'. Trên cửa sổ, hệ thống tệp NTFS. Hệ điều hành nào và hệ thống tệp nào bạn đã thử nghiệm mã này? – BatScream

+0

@BatScream mã đang hoạt động cho tôi vì nó nằm trong hệ điều hành windows và tôi nhận được kết quả tương tự như được đề cập trong OP – Adil

Trả lời

1
public class FileTest { 

    public static void matches(Path path, String glob){ 
     PathMatcher matcher = FileSystems.getDefault().getPathMatcher(glob); 
     System.out.println(matcher.matches(path)); 
    } 
    public static void main(String[] args) throws IOException { 
     Path path = Paths.get("/com/java/One.java"); 
     matches(path, "glob:*.java");  // regular expression that matches any file path that end with .java so it will return the value as true 
     matches(path, "glob:**/*.java"); // regular expression ** characters matches zero or more characters crossing directory boundaries so it will match complete path but if you put /* it will search for a path like this /com/java//one.java soe here it will not match the path and will return value as false. 
     matches(path, "glob:*"); // this will match any path and return value as true. 
     matches(path, "glob:**"); // this will complete path crossing directory so it will return you value as true. 

    } 
} 

Trong chương trình trên khi bạn đang gọi trận với đường dẫn như "/com/java/One.java" và glob biểu thức chính quy để tìm kiếm hoặc phù hợp với con đường hàm sẽ lấy giá trị và thực hiện các hoạt động và trở về đúng hay sai . Đầu ra:

true 
false 
true 
true 

Nếu bạn đang sử dụng nền tảng cửa sổ thì bạn cần sửa đổi chương trình của mình như sau.

public class match { 

    public static void matches(Path path, String glob){ 
    PathMatcher matcher = FileSystems.getDefault().getPathMatcher(glob); 
    System.out.println(matcher.matches(path)); 
    } 
    public static void main(String[] args) throws IOException { 
    Path path = Paths.get("\\com\\java\\One.java"); 
    matches(path, "glob:*.java"); 
    matches(path, "glob:**\\*.java"); 
    matches(path, "glob:*"); 
    matches(path, "glob:**"); 

    } 
} 

Để biết thêm chi tiết Click here

2
matches(path, "glob:*.java"); // => flase 

vì con đường của bạn chứa / trong đó mô tả một hệ thống phân cấp thư mục, *.java phù hợp với bất kỳ tên tập tin với .java mở rộng

matches(path, "glob:**/*.java"); // => true 

** trận đấu bất kỳ chuỗi, bao gồm cả đường dẫn con (như /com/java/ trong bạn e xample)

matches(path, "glob:*"); // => false 

như đã đề cập trong một đầu tiên, bởi vì bạn có con đường tách /

matches(path, "glob:**"); // => true 

như đã đề cập trong một giây, vì ** trận đấu bất kỳ chuỗi bao gồm /

Các vấn đề liên quan