Pregunta

He creado una aplicación Java para "Debian Linux". Ahora quiero que esa aplicación lea un archivo colocado en el directorio donde se especifica el archivo JAR de esa aplicación. Entonces, ¿qué especificar en el argumento del objeto de archivo?

File fileToBeReaded = new File(...);

¿Qué especificar como argumento para la declaración anterior para especificar FilePath relativo que representa la ruta donde se ha colocado el archivo JAR de la aplicación?

¿Fue útil?

Solución

Si conoce el nombre del archivo, por supuesto es simplemente

new File("./myFileName")

Si no sabe el nombre, puede usar el método List () del objeto Archivo para obtener una lista de archivos en el directorio actual, y luego elegir el que desee.

Otros consejos

Usando rutas relativas en java.io.File depende totalmente del directorio de trabajo actual. Esto difiere con la forma en que ejecuta el frasco. Si estás por ejemplo en /foo y ejecutas el frasco por java -jar /bar/jar/Bar.jar Entonces el directorio de trabajo todavía está /foo. Pero si tu cd a /bar/jar y ejecutar java -jar Bar.jar Entonces el directorio de trabajo es /bar/jar.

Si desea la ruta de la raíz donde se encuentra el frasco, una de las formas sería:

File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());

Esto devuelve la ruta raíz del archivo JAR (Iow la raíz classpath). Si coloca su recurso en relación con la raíz classpath, puede acceder a él de la siguiente manera:

File resource = new File(root, "filename.ext");

Alternativamente, también puede usar:

File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());

Creo que esto debería hacer el truco:

File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");

De esta manera, el archivo se buscará en el user.dir propiedad, que será el directorio de trabajo de su aplicación.

¿Estás preguntando sobre los problemas de los personajes de escape?

Si ese es el caso, use cortes hacia adelante en lugar de cortes hacia atrás como

"C: /users/you/desktop/test.txt"

en vez de

"C: Users You Desktop test.txt"

Puede pedirle a su cargador de clases que le dé la ubicación del frasco:

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

... pero sugeriría poner el archivo que está buscando dentro de su archivo JAR y leerlo como un recurso (getClass().getResourceAsStream( "myFile.txt" )).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top