Uma maneira seria usar a propriedade do sistema,System.getProperty("user.dir");
que fornecerá "O diretório de trabalho atual quando as propriedades foram inicializadas". Provavelmente é isso que você deseja. para descobrir onde o java
comando foi emitido, no seu caso, no diretório com os arquivos a serem processados, mesmo que o arquivo .jar real possa residir em outro lugar na máquina. Ter o diretório do arquivo .jar real não é útil na maioria dos casos.
O seguinte irá imprimir o diretório atual de onde o comando foi chamado, independentemente de onde o arquivo .class ou .jar o arquivo .class está.
public class Test
{
public static void main(final String[] args)
{
final String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir);
}
}
se você estiver em /User/me/
e seu arquivo .jar contendo o código acima estiver no /opt/some/nested/dir/
comando java -jar /opt/some/nested/dir/test.jar Test
será gerado current dir = /User/me
.
Você também deve olhar como bônus em usar um bom analisador de argumentos de linha de comando orientado a objetos. Eu recomendo altamente JSAP , o Java Simple Argument Parser. Isso permitiria que você usasse System.getProperty("user.dir")
e, alternativamente, passasse outra coisa para anular o comportamento. Uma solução muito mais sustentável. Isso tornaria a passagem no diretório para o processo muito fácil de fazer e seria capaz de retroceder user.dir
se nada fosse passado.