web-dev-qa-db-fra.com

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

J'ai une fonction où j'essaye de charger un fichier dans un objet URL, parce que l'exemple de projet l'a 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 relativement nouveau à Java, donc je sais que je fais quelque chose de mal.

34
roymustang86

Il ne peut pas être compilé 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 ( du chemin de classe). L'utiliser avec un File n'a aucun sens. Si vous souhaitez 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 du compilateur la prochaine fois que vous aurez une telle question.

7
JB Nizet

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");
62
Robin

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

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

20
Andres

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");
10
steven35
SecureFTP.class.getClassLoader().getResource(<<your resource name>>); 

Devrait faire l'affaire!

3
Mariam