2009-10-12 17 views
8

Nếu tôi có tài nguyên trên đường dẫn lớp, tôi có thể tải cả tài nguyên đó dưới dạng luồng, và thậm chí có cả biểu diễn URL của nó. Thật không may một số triển khai của Url không thực hiện lastModified một cách chính xác.Cho một tài nguyên classpath, có cách nào để có được đối tượng java.io.File có/chứa nó?

Điều tôi muốn là lấy đường dẫn đến mục nào đó trong đường dẫn lớp rồi sau đó giải quyết nó vào tệp đang ở trên đĩa - nếu nó trong một cái bình, thì Tập tin trỏ đến bình là tốt. Sau đó tôi có thể nhận được lastModified từ đối tượng File thay vì URL, điều này sẽ hữu ích hơn.

Trả lời

12

Nói đại khái:

URL url = this.getClass().getResource(myResource); 
    String fileName; 
    if (url.getProtocol().equals("file")) { 
     fileName = url.getFile();   
    } else if (url.getProtocol().equals("jar")) { 
     JarURLConnection jarUrl = (JarURLConnection) url.openConnection(); 
     fileName = jarUrl.getJarFile().getName();    
    } else { 
     throw new IllegalArgumentException("Not a file"); 
    } 
    File file = new File(fileName); 
    long lastModified = file.lastModified(); 

nên làm những gì bạn muốn. Bạn sẽ cần phải nắm bắt IOException.

-1

Không. Điều này không thể được thực hiện thường vì URL có thể thể hiện các tài nguyên không được liên kết với tệp. Ví dụ: có thể là HTTP, FTP hoặc JNDI, v.v.

Bạn có thể kiểm tra giao thức và tự tạo tệp nếu giao thức dựa trên tệp, như "file: // path", "jar: // path ! ... ".

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