45 votes

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

J'ai une fonction où j'essaye de charger un fichier dans une URL parce que le projet d'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 toujours pas pu le compiler.

Je suis assez novice en Java, donc je sais que je fais quelque chose de mal.

73voto

Robin Points 23666

La méthode main est une méthode statique, donc essayer d'accéder à this (= l'objet actuel) ne fonctionnera pas. Vous pouvez remplacer cette ligne par

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

28voto

Andres Points 261

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

Utilisez simplement TheClassName.class au lieu de getClass().

20voto

steven35 Points 2290

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

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

9voto

JB Nizet Points 250258

Il ne peut pas compiler parce que 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 des classes (à partir du classpath). En l'utilisant avec un File n'a aucun sens. Si vous voulez ouvrir un fichier, il suffit d'utiliser une commande FileInputStream ou un FileReader .

Ver http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource%28java.lang.String%29 et incluez le message d'erreur du compilateur la prochaine fois que vous aurez une telle question.

4voto

Mariam Points 41
SecureFTP.class.getClassLoader().getResource(<<your resource name>>); 

Cela devrait faire l'affaire !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X