2011-12-02 25 views
27

Tengo una función en la que intento cargar un archivo en un objeto URL, porque el proyecto de ejemplo lo dice.¿Cómo obtener getclass(). GetResource() desde un contexto estático?

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

He intentado utilizar SecureFTP.class.getResource, pero aún así no podría compilarlo.

Soy bastante nuevo en Java, así que sé que estoy haciendo algo mal.

Respuesta

5

no puede compilar porque getResource toma un nombre de recurso (un String, y no un File) como parámetro, con el fin de cargar un recurso mediante el mecanismo de carga de clases (de el classpath). Usarlo con un File no tiene sentido. Si desea abrir un archivo, solo use un FileInputStream o un FileReader.

Consulte http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource%28java.lang.String%29 e incluya el mensaje de error del compilador la próxima vez que tenga una pregunta.

53

El método principal es un método estático, por lo que intentar acceder al this (= el objeto actual) no funcionará. Puede reemplazar esa línea por

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

Eso es precisamente lo que intentó el OP. Lea la pregunta más carfully. El problema es que está pasando un archivo en lugar de un STring al método. –

+0

Tienes razón. Corregí mi respuesta. Sin embargo, el OP intentó SecureFTP.class.getResource, sin la llamada getClassLoader – Robin

+0

Su método no funcionará: getResource no carga recursos del sistema de archivos, y los nombres de los recursos no comienzan con un /. Lee mi respuesta –

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

¡Hay que hacer el truco!

5

Pregunta anterior, pero esto no se ha dicho todavía. Puede hacerlo desde un contexto estático:

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