Verificar de onde o jar esta sendo executado

9 respostas
xandevieira

Boa tarde, dei uma procurada mas não encontrei.
Tem como eu saber se onde o jar esta sendo executado?
ex. c:\temp\meujar.jar

9 Respostas

drsmachado

Dê uma nova olhada na API de FileInputStream e ZipFile

KamikazeBr
System.getProperty("user.dir");
janjan

ele quer saber o diretório que o jar esta sendo executado e não o home do usuario logado… tente isso

java.lang.System.out.println(new File(".").getAbsolutePath());
xandevieira

[quote=janjan]ele quer saber o diretório que o jar esta sendo executado e não o home do usuario logado… tente isso

java.lang.System.out.println(new File(".").getAbsolutePath());

Obriado a todos, janjan era isso mesmo que queria, funcionou.
vlw

R

Na maioria das vezes a técnica do janjan funciona, mas às vezes pode falhar. Basta que a JVM tenha sido disparada a partir de uma pasta diferente daquela em que está o arquivo JAR:

java -jar …\subpasta\arquivoJar.jar

xandevieira

roger_rf:
Na maioria das vezes a técnica do janjan funciona, mas às vezes pode falhar. Basta que a JVM tenha sido disparada a partir de uma pasta diferente daquela em que está o arquivo JAR:

java -jar …\subpasta\arquivoJar.jar

Realmente, mas no meu caso são usuario leigos, irão executar sempre clicando, creio que não devo ter problemas com isso.

discorpio

[quote=janjan]ele quer saber o diretório que o jar esta sendo executado e não o home do usuario logado… tente isso

java.lang.System.out.println(new File(".").getAbsolutePath());

Boa tarde a todos.

Existe também outro cuidado que voce precisa ter com o método “getAbsolutePath()” que são as barras invertidas “”, ou seja, ele retorna uma string assim:

file:\C:\MeuDiretorio\arquivo.jar

A barra invertida no java é um caracter especial que serve para fazer quebra de linha e concatenação de caracteres, se voce estiver recuperando esse valor dentro de uma classe java, o compilador pode interpretá-lo como sendo esse caracter especial e gerar exceção na aplicação.

Assim sendo eu prefiro utilizar o método “toURL()” da classe File, que retorna uma string com as barras normais, assim:

File arquivo = new File(".");
   String path = arquivo.toURL().toString();
   path.replaceAll("file:/", "");

   // O resultado será: C:/MeuDiretorio/arquivo.jar
KamikazeBr

Me perdoe, mas você testou o código que eu postei, antes de afirmar isso?

Só para referencias…

http://www.guj.com.br/java/36627-qual-a-diferenca-entre-systemgetpropertyuserdir-e-systemgetpropertyuserhome-

E na própria documentação?

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#getProperties()

Danke…

xandevieira

Me perdoe, mas você testou o código que eu postei, antes de afirmar isso?

Só para referencias…

http://www.guj.com.br/java/36627-qual-a-diferenca-entre-systemgetpropertyuserdir-e-systemgetpropertyuserhome-

E na própria documentação?

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#getProperties()

Danke…

testei tb, mas tem o mesmo problema que o roger_rf falou, mas funcionou tb.
vlw

Criado 2 de fevereiro de 2011
Ultima resposta 3 de fev. de 2011
Respostas 9
Participantes 6