¿Cómo debo cargar archivos en mi aplicación Java?

¿Cómo debo cargar archivos en mi aplicación Java?

La respuesta corta

Usa uno de estos dos métodos:

  • Class.getResource(String)
  • Class.getResourceAsStream(String)

Por ejemplo:

 InputStream inputStream = YourClass.class.getResourceAsStream("image.jpg"); 

La respuesta larga

Típicamente, uno no querría cargar archivos usando rutas absolutas. Por ejemplo, no haga esto si puede ayudarlo:

 File file = new File("C:\\Users\\Joe\\image.jpg"); 

Esta técnica no se recomienda por al menos dos razones. Primero, crea una dependencia en un sistema operativo particular, lo que impide que la aplicación se mueva fácilmente a otro sistema operativo. Uno de los principales beneficios de Java es la capacidad de ejecutar el mismo bytecode en muchas plataformas diferentes. Usar una ruta absoluta como esta hace que el código sea mucho menos portátil.

En segundo lugar, dependiendo de la ubicación relativa del archivo, esta técnica podría crear una dependencia externa y limitar la movilidad de la aplicación. Si el archivo existe fuera del directorio actual de la aplicación, esto crea una dependencia externa y uno debería conocer la dependencia para mover la aplicación a otra máquina (propensa a errores).

En su lugar, use los métodos getResource() en la clase Class . Esto hace que la aplicación sea mucho más portátil. Se puede mover a diferentes plataformas, máquinas o directorios y aún funcionar correctamente.

getResource está bien, pero el uso de rutas relativas también funcionará igual de bien, siempre que pueda controlar dónde se encuentra su directorio de trabajo (lo que normalmente puede hacer).

Además, la dependencia de la plataforma con respecto al carácter separador puede obtenerse usando File.separator , File.separatorChar , o System.getProperty (“file.separator”) .

¿Para qué está cargando los archivos: configuración o datos (como un archivo de entrada) o como recurso?

  • Si es un recurso, sigue la sugerencia y el ejemplo dados por Will y Justin
  • Si la configuración, puede utilizar un ResourceBundle o Spring (si su configuración es más compleja).
  • Si necesita leer un archivo para procesar los datos en su interior, este fragmento de código puede ayudar a BufferedReader file = new BufferedReader(new FileReader(filename)) y luego leer cada línea del archivo usando file.readLine(); No te olvides de cerrar el archivo.

No he tenido problemas solo con el uso de separadores de ruta estilo Unix, incluso en Windows (aunque es una buena práctica verificar File.separatorChar ).

La técnica de usar ClassLoader.getResource () es mejor para recursos de solo lectura que se cargarán desde archivos JAR. En ocasiones, puede determinar mediante progtwigción el directorio de la aplicación , que es útil para archivos configurables por el administrador o aplicaciones de servidor. (Por supuesto, los archivos editables por el usuario deben almacenarse en algún lugar del directorio System.getProperty (“usuario.casa”) ).

 public byte[] loadBinaryFile (String name) { try { DataInputStream dis = new DataInputStream(new FileInputStream(name)); byte[] theBytes = new byte[dis.available()]; dis.read(theBytes, 0, dis.available()); dis.close(); return theBytes; } catch (IOException ex) { } return null; } // ()