Una forma sería usar la propiedad del sistema,System.getProperty("user.dir");
esto le dará "El directorio de trabajo actual cuando se inicializaron las propiedades". Probablemente esto es lo que quieres. para averiguar dónde java
se emitió el comando, en su caso en el directorio con los archivos a procesar, aunque el archivo .jar real puede residir en otro lugar de la máquina. Tener el directorio del archivo .jar real no es tan útil en la mayoría de los casos.
A continuación, se imprimirá el directorio actual desde donde se invocó el comando, independientemente de dónde se encuentre el archivo .class o .jar.
public class Test
{
public static void main(final String[] args)
{
final String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir);
}
}
si está dentro /User/me/
y su archivo .jar que contiene el código anterior está en /opt/some/nested/dir/
el comando java -jar /opt/some/nested/dir/test.jar Test
saldrácurrent dir = /User/me
.
También debería considerar como un bono el uso de un buen analizador de argumentos de línea de comando orientado a objetos. Recomiendo encarecidamente JSAP , el analizador de argumentos simple de Java. Esto le permitiría usar System.getProperty("user.dir")
y, alternativamente, pasar algo más para anular el comportamiento. Una solución mucho más fácil de mantener. Esto haría que pasar en el directorio para procesar sea muy fácil de hacer y podría recurrir user.dir
si no se pasa nada.