2011-12-02 17 views
27

Mam funkcję, w której próbuję załadować plik do obiektu URL, ponieważ przykład projektu tak powiedział.Jak uzyskać getclass(). GetResource() ze statycznego kontekstu?

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

Próbowałem użyć SecureFTP.class.getResource, ale nadal nie można go skompilować.

Jestem dość nowy w Javie, więc wiem, że robię coś złego.

Odpowiedz

5

Nie można skompilować ponieważ getResource bierze nazwę zasobu (a String, a nie File) jako parametr, aby załadować zasobów przy użyciu mechanizmu klasa obciążenia (od ścieżka klas). Używanie go z File nie ma sensu. Jeśli chcesz otworzyć plik, po prostu użyj FileInputStream lub FileReader.

Zobacz http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource%28java.lang.String%29 i dołącz komunikat o błędzie kompilatora następnym razem, gdy masz takie pytanie.

53

Główną metodą jest metoda statyczna, więc próba dostępu do this (= bieżący obiekt) nie będzie działać. Można zastąpić tę linię za

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

Dokładnie tego próbował OP. Przeczytaj to bardziej szczegółowo. Problem polega na tym, że przekazuje plik zamiast STring do metody. –

+0

Masz rację. Poprawiłem moją odpowiedź. Jednak OP próbował SecureFTP.class.getResource bez wywołania getClassLoader. – Robin

+0

Twoja metoda nie zadziała: getResource nie ładuje zasobów z systemu plików, a nazwy zasobów nie zaczynają się od /. Przeczytaj moją odpowiedź. –

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

Powinien załatwić sprawę!

5

Stare pytanie, ale nie zostało to jeszcze powiedziane. Możesz to zrobić ze statycznego kontekstu:

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