2009-10-12 2 views
8

클래스 패스에 리소스가있는 경우이를 스트림 스트림으로로드 할 수 있으며 해당 스트림을 URL로 표현할 수도 있습니다. 불행히도 URL의 일부 구현은 lastModified를 올바르게 구현하지 않습니다.클래스 패스 리소스가 주어지면 java.io.File 객체를 갖거나 포함하는 방법이 있습니까?

내가 원하는 것은 classpath에서 경로를 취한 다음 디스크에있는 파일로 해석하는 것입니다. jar 파일에있는 경우 jar 파일을 가리키는 파일은 정상입니다. 그런 다음 URL 대신 File 객체에서 lastModified를 가져올 수 있습니다. 그러면 도움이 될 것입니다.

답변

12

대략 말하기 :

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(); 

당신이 원하는 것을해야한다. IOException을 catch해야합니다.

-1

아니요. URL은 파일과 관련되지 않은 리소스를 나타낼 수 있기 때문에 일반적으로 수행 할 수 없습니다. 예를 들어, HTTP, FTP 또는 JNDI 등일 수 있습니다.

"file : // path", "jar : // path"와 같은 프로토콜이 파일 기반 인 경우 프로토콜을 확인하고 파일을 직접 만들 수 있습니다. ! ... ".

관련 문제