2011-12-02 2 views
27

예제 프로젝트에서 이렇게 말했기 때문에 나는 URL 개체에 파일을로드하려고합니다. getclass(). getResource()를 정적 컨텍스트에서 가져 오는 방법은 무엇입니까?

public class SecureFTP { 

    public static void main(String[] args) throws IOException , ClassNotFoundException, SQLException , JSchException, SftpException{ 
     File file = new File("/home/xxxxx/.ssh/authorized_keys"); 
     URL keyFileURL = this.getClass().getClassLoader().getResource(file); 

나는 SecureFTP.class.getResource를 사용하여 시도,하지만 여전히 컴파일 할 수 없었다.

나는 자바에 대해 상당히 익숙하다. 그래서 나는 잘못된 것을하고있다.

답변

53

주 방법은 정적 메서드이므로 this (= 현재 개체)에 액세스하려는 경우 작동하지 않습니다. getResource가에서 (클래스 로딩 메커니즘을 사용하여 리소스를로드하기 위해, 매개 변수로 자원 이름 (A String, 아닌 File)를 필요하기 때문에 당신은 컴파일 할 수 없습니다

URL keyFileURL = SecureFTP.class.getClassLoader().getResource("/home/xxxxx/.ssh/authorized_keys"); 
+0

정확히 OP가 시도한 것입니다. 더 자세히 질문을 읽어보십시오. 문제는 그가 STring보다는 File을 메소드에 전달한다는 것입니다. –

+0

당신이 옳습니다. 내 대답을 바로 잡았어. 그러나 OP는 getClassLoader 호출없이 SecureFTP.class.getResource를 시도했습니다. – Robin

+0

메소드가 작동하지 않습니다. getResource가 파일 시스템에서 자원을로드하지 않으며 자원 이름이 /로 시작하지 않습니다. 내 대답을 읽으십시오. –

3
SecureFTP.class.getClassLoader().getResource(<<your resource name>>); 

트릭을 수행해야합니다! 에서

5

이전 질문이지만 아직 언급하지 않았습니다. 정적 컨텍스트에서이 작업을 수행 할 수 있습니다.

ClassLoader classLoader = ClassLoader.getSystemClassLoader(); 
classLoader.getResource("filename");