2012-09-06 16 views

Respuesta

11

Desde el Javadoc para Class.getResourceAsStream():

delegados este método para el cargador de clases de este objeto. Antes de delegación, un nombre de recurso absoluta se construye a partir del nombre de recurso dado usando este algoritmo:

  • Si el name comienza con una '/' ('\ u002f'), entonces el nombre absoluto del recurso es el porción del nombre que sigue al '/'.
  • De lo contrario, el nombre absoluta es de la siguiente forma: modified_package_name/name
    Cuando el modified_package_name es el nombre del paquete de este objeto con '/' sustituido por ''. ('\ u002e').

En otras palabras, ellos hacen lo mismo si el "camino" comienza con un "/", pero si no es así, en este último caso, el camino será en relación con el paquete de la clase, mientras el cargador de clases será absoluto.

En resumen, el primero obtiene path/to/my/properties y el segundo obtiene package/of/myclass/path/to/my/properties.

2

Desde el Class.getClassLoader()documentation:

Devuelve el cargador de clases para la clase. Algunas implementaciones pueden usar null para representar el cargador de clase bootstrap. Este método devolverá nulo en tales implementaciones si esta clase fue cargada por el cargador de clase bootstrap .

Así getClassLoader()puede retorno null si la clase ha sido cargado por el cargador de clases de arranque, por lo tanto, el cheque nulo en el Class.getResourceAsStreamimplementation:

public InputStream getResourceAsStream(String name) { 
    name = resolveName(name); 
    ClassLoader cl = getClassLoader0(); 
    if (cl==null) { 
     // A system class. 
     return ClassLoader.getSystemResourceAsStream(name); 
    } 
    return cl.getResourceAsStream(name); 
} 

También habrá dado cuenta de la declaración name = resolveName(name); que Marcos Peters ha explicado en his answer.

1

La principal diferencia práctica es que puede usar rutas relativas cuando pasa por la clase. Entonces, si sus propiedades están en el mismo paquete que MyClass, puede hacer

MyClass.class.getResourceAsStream("properties"); 
Cuestiones relacionadas