2011-12-02 13 views
27

Ho una funzione in cui sto cercando di caricare un file su un oggetto URL, perché il progetto di esempio lo ha detto.Come ottenere getclass(). GetResource() da un contesto statico?

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

Ho provato ad utilizzare SecureFTP.class.getResource, ma ancora non poteva compilarlo.

Sono abbastanza nuovo in Java, quindi so che sto facendo qualcosa di sbagliato.

risposta

5

Non può compilare perché getResource prende un nome di risorsa (un String, e non un File) come parametro, al fine di caricare una risorsa utilizzando il meccanismo di caricamento delle classi (da il classpath). Usarlo con un File non ha senso. Se si desidera aprire un file, utilizzare semplicemente FileInputStream o FileReader.

Vedere http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource%28java.lang.String%29 e includere il messaggio di errore del compilatore la prossima volta che si presenta una domanda del genere.

53

Il metodo principale è un metodo statico, quindi provare ad accedere a this (= l'oggetto corrente) non funzionerà. È possibile sostituire quella linea da

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

Questo è esattamente ciò che l'OP ha provato. Leggi la domanda più attentamente. Il problema è che sta passando un File piuttosto che un STING al metodo. –

+0

Hai ragione. Ho corretto la mia risposta. Tuttavia, l'OP ha provato SecureFTP.class.getResource, senza la chiamata getClassLoader – Robin

+0

Il metodo non funzionerà: getResource non carica le risorse dal file system e i nomi delle risorse non iniziano con /. Leggi la mia risposta. –

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

Dovrebbe fare il trucco!

5

Vecchia domanda ma questo non è stato ancora detto. Puoi farlo da un contesto statico:

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