Comment obtenir getclass().getResource() à partir d'un contexte statique?

j'ai une fonction où j'essaie de charger un fichier sur un objet URL , parce que le projet exemple le dit.

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

j'ai essayé d'utiliser SecureFTP.class.getResource , mais il n'a pas pu le compiler.

je suis assez nouveau à Java, donc je sais que je fais quelque chose de mal.

29
demandé sur Bhesh Gurung 2011-12-03 00:03:17

5 réponses

il ne peut pas compiler car getResource prend un nom de Ressource (un String , et non un File ) comme paramètre, afin de charger une ressource en utilisant le mécanisme de chargement de classe (à partir du classepath). L'utiliser avec un File n'a aucun sens. Si vous voulez ouvrir un fichier, utilisez simplement un FileInputStream ou un FileReader .

voir http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource%28java.lang.String%29 , et inclure le message d'erreur compilateur prochaine fois que vous avez une telle question.

6
répondu JB Nizet 2011-12-02 20:09:44

la méthode principale est une méthode statique, donc essayer d'accéder à this (=L'objet courant) ne fonctionnera pas. Vous pouvez remplacer cette ligne par

URL keyFileURL = SecureFTP.class.getClassLoader().getResource("/home/xxxxx/.ssh/authorized_keys");
54
répondu Robin 2011-12-02 20:12:16

De: Comment appeler getClass() à partir d'une méthode statique en Java?

il suffit d'utiliser Leclassname.class au lieu de getClass().

12
répondu Andres 2017-05-23 12:34:39

question ancienne mais cela n'a pas encore été dit. Vous pouvez le faire à partir d'un contexte statique:

ClassLoader classLoader = ClassLoader.getSystemClassLoader();
classLoader.getResource("filename");
6
répondu steven35 2017-02-02 19:38:47
SecureFTP.class.getClassLoader().getResource(<<your resource name>>); 

Devrait faire l'affaire!

3
répondu Mariam 2014-05-28 14:36:31