Как получить getclass (). GetResource () из статического контекста? - PullRequest
32 голосов
/ 03 декабря 2011

У меня есть функция, в которой я пытаюсь загрузить файл в объект URL, потому что пример проекта сказал так.

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, но все равно не смог скомпилировать его.

Я довольно новичок в Java, поэтому я знаю, что делаю что-то не так.

Ответы [ 5 ]

62 голосов
/ 03 декабря 2011

Основной метод является статическим, поэтому попытка доступа к this (= текущий объект) не будет работать.Вы можете заменить эту строку на

URL keyFileURL = SecureFTP.class.getClassLoader().getResource("/home/xxxxx/.ssh/authorized_keys");
17 голосов
/ 30 апреля 2015

От: Как вызвать getClass () из статического метода в Java?

Просто используйте TheClassName.class вместо getClass ().

9 голосов
/ 02 февраля 2017

Старый вопрос, но этого еще не было сказано. Вы можете сделать это из статического контекста:

ClassLoader classLoader = ClassLoader.getSystemClassLoader();
classLoader.getResource("filename");
6 голосов
/ 03 декабря 2011

Невозможно скомпилировать, поскольку getResource принимает имя ресурса (String, а не File) в качестве параметра, чтобы загрузить ресурс с помощью механизма загрузки классов (из classpath).Использование его с File не имеет смысла.Если вы хотите открыть файл, просто используйте FileInputStream или FileReader.

См. http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource%28java.lang.String%29, и включите сообщение об ошибке компилятора в следующий раз, когда у вас возникнет такой вопрос.

3 голосов
/ 28 мая 2014
SecureFTP.class.getClassLoader().getResource(<<your resource name>>); 

Должен сделать свое дело!

...