style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Uso del getResource para la clase File en java

Hola buen dia.
Estoy realizando un programita en java en el cual necesito hacer referencia a algunos archivos (que estan dentro de la carpeta de mi proyecto) por ejemplo: configuracion.properties, clienteLog.log, archivo.txt, etcetera.
Lo que estoy haciendo es crear un objeto de tipo File y como parametro hago referencia al recurso necesario (archivo.txt por ejemplo) de la siguiente manera:

File file = new File(getClass().getResource("/controlador/resource/archivo.txt").getFile());

Y al momento de hacer algo con el objeto creado como por ejemplo:

if( file.exist ){
     System.out.println(" El archivo si existe. ");
}

Siempre retorna un false, la ruta del archivo esta bien establecida pero no he encontrado la forma de hacer esto. El problema es que necesito el objeto de tipo File.
Alguien que pueda ayudarme? se lo agradeceria bastante. Saludos y gracias de antemano.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

El directorio controlador

La ruta del recurso debe de estar en tu classpath para que el método getResource lo pueda encontrar.

En este ejemplo la ruta no esta en el classpath, esta dentro de un directorio llamado "otroDirectorio"

import java.io.File;

class Ejemplo {
    public static void main(String ... args ) {
        File file = new File(
            Ejemplo.class.getResource("/controlador/resource/archivo.txt").getFile()
        );
        if ( file.exists() ) {
            System.out.println("Archivo existe");
        } else {
            System.out.println("Archivo NO existe");
        }
    }
}

c:\>dir otroDirectorio\controlador\resource\archivo.txt

07/16/2014  12:07 PM                 1 archivo.txt
               1 File(s)              1 bytes

c:\>java Ejemplo
Exception in thread "main" java.lang.NullPointerException
        at Ejemplo.main(Ejemplo.java:5)

Arroja NullPointerException porque el método getResource devuelve null ( no lo encontró ) y luego null.getFile() resulta en NullPointerException; ni siquiera llega a la condición.

Si se agrega el directorio "otroDirectorio" al classpath,entonces Java sabrá donde buscar la ruta "controlador\resource\archivo.txt"

c:\>java -cp .;otroDirectorio Ejemplo
Archivo existe

Se puede modificar el código para validar cuando es null y mostrar que el archivo no existe en vez de fallar con NullPointerException así

import java.io.File;
import java.net.URL;

class Ejemplo {
    public static void main(String ... args ) {
        URL resource = Ejemplo.class.getResource("/controlador/resource/archivo.txt");
        File file = null;;

        if ( resource != null && (file = new File(resource.getFile())).exists() ) {
            System.out.println("Archivo existe");
        } else {
            System.out.println("Archivo NO existe");
        }
    }

*Nota sobre la condición en el segundo ejemplo, en términos generales asignar y evaluar (como en  (file = new File(resource.getFile())).exists() ) no es tan recomendable porque no es tan claro que ocurre, pero para mí es más claro esto que anidar el if:

        URL resource = Ejemplo.class.getResource("/controlador/resource/archivo.txt");

        if ( resource != null ) {
            File file = new File(resource.getFile());
            if( file.exists() ) {
                System.out.println("Archivo existe");
            } else {
                System.out.println("Archivo NO existe");
            }
        } else {
            System.out.println("Archivo NO existe");
        }

Pero eso ya es cuestión de estilo.

Todavia no logro hacer que funcione

Muchas gracias por la ayuda OscarRyz pero no he logrado que me funcione. Este es la estructura de un programa de pruebas:

Rutas-->controlador.img-->archivo.txt
      |
       -->Rutas¬-->Rutas.java
               |-->Sample.fxml
               |-->SampleControler.java

En la clase SampleControler.java estoy haciendo lo siguiente:

File file = new File( SampleController.class.getResource("/controlador/img/archivo.txt").getFile() );
         if( file.exists() )
             System.out.println("Si existe ");
         else{
             System.out.println("No existe ");
         }        
         System.out.println(">>-------------------> " + file);

Y siempre en la condicion retorna false. Algo estoy haciendo mal? y el file no esta nulo porque cuando lo imprimo en la consola me sale esto:

>>-------------------> file:\C:\Users\fmarrujo\Desktop\ControlDeDocumentos\rutas\dist\rutas.jar!\controlador\img\archivo.txt

Ah ya veo. El archivo está

Ah ya veo. El archivo está dentro de un jar, por eso el recurso sí existe, pero no es posible crear un archivo que haga referencia a un jar que está dentro de un jar.

Es como querer crear un archivo que esta dentro de un zip sin extraerlo.

Intenta obtener el inputstream en vez de eso.

http://stackoverflow.com/questions/3369794/how-to-a-read-file-from-jar-i...

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">