Descobrir caminho da aplicação

9 respostas
russo

Como faço pra descobrir o caminho da minha aplicação (a pasta onde estar o .jar)?
path

9 Respostas

M

tente isso

File dir1 = new File (".");
   System.out.println ("Current dir : " + dir1.getCanonicalPath());
jctosta

Tenta isso que é melhor e não precisa criar objetos:

String dir = System.getProperty("user.dir");
russo

jctosta:
Tenta isso que é melhor e não precisa criar objetos:

String dir = System.getProperty("user.dir");

magavilha

Malkav.Felipe

Olá;

Quando eu executo o comando

String dir = System.getProperty("user.dir");

no Windows funciona perfeitamente, me retornando a pasta onde está o .jar da aplicação;

Ja no Linux, System.getProperty(“user.dir”) me retorna a pasta do usuario do sistema, como /home/usuario .

Há alguma coisa errada com o java na minha maquina, ou essa é a configuração padrão no linux mesmo? Uma outra coisa que eu percebi, é que quando crio um novo arquivo como

File file = new File("teste.txt"); file.createNewFile();
o arquivo é criado na pasta do usuario também, e não na pasta da aplicação, como deveria ser.

Como faço pra que, tanto no linux, como no windows eu consiga pegar o caminho da aplicação?
Ou como arrumo esse “problema” (se for um) no linux?

Qualquer ajuda é bem vinda;

sergiotaborda

Malkav.Felipe:
Olá;

Quando eu executo o comando

String dir = System.getProperty("user.dir");

no Windows funciona perfeitamente, me retornando a pasta onde está o .jar da aplicação;

Ja no Linux, System.getProperty(“user.dir”) me retorna a pasta do usuario do sistema, como /home/usuario .

Isso está certo. É isso mesmo que tem que retornar.
Se vc quer a pasta onde está o jar use File(".") como foi dito antes.

M

sergiotaborda:
Malkav.Felipe:
Olá;

Quando eu executo o comando

String dir = System.getProperty("user.dir");

no Windows funciona perfeitamente, me retornando a pasta onde está o .jar da aplicação;

Ja no Linux, System.getProperty(“user.dir”) me retorna a pasta do usuario do sistema, como /home/usuario .

Isso está certo. É isso mesmo que tem que retornar.
Se vc quer a pasta onde está o jar use File(".") como foi dito antes.


Eu desconfio… qual distribuição que você está usando? Qual a versão do JRE e qual o fabricante?

Eu uso Ubuntu 9.10, JRE da Sun 1.6.15. Com o seguinte programa:

public class Propriedades {

	public static void main(String[] args) {
		System.out.println("user.dir: " + System.getProperty("user.dir"));
		System.out.println("user.home: " + System.getProperty("user.home"));
	}

}

Fiz os seguintes testes (o arquivo Propriedades.java está na Área de Trabalho):

marco@pc:~$ cd Área\ de\ Trabalho/
marco@pc:~/Área de Trabalho$ javac Propriedades.java 
marco@pc:~/Área de Trabalho$ java Propriedades 
user.dir: /home/marco/Área de Trabalho // diretório atual!
user.home: /home/marco
marco@pc:~/Área de Trabalho$ mv Propriedades.class /home/marco/Documentos/
marco@pc:~/Área de Trabalho$ cd /home/marco/Documentos/
marco@pc:~/Documentos$ java Propriedades 
user.dir: /home/marco/Documentos // diretório atual!
user.home: /home/marco
marco@pc:~/Documentos$ mv Propriedades.class /home/marco/Imagens/
marco@pc:~/Documentos$ cd /home/marco/Imagens/
marco@pc:~/Imagens$ java Propriedades 
user.dir: /home/marco/Imagens // diretório atual!
user.home: /home/marco
marco@pc:~/Imagens$

O “user.dir”, assim como especificado na documentação, deve retornar o diretório atual, independentemente do SO.

sergiotaborda
marcobiscaro2112:
sergiotaborda:
Malkav.Felipe:
Olá; Quando eu executo o comando
String dir = System.getProperty("user.dir");
no Windows funciona perfeitamente, me retornando a pasta onde está o .jar da aplicação;

Ja no Linux, System.getProperty("user.dir") me retorna a pasta do usuario do sistema, como /home/usuario .

Isso está certo. É isso mesmo que tem que retornar.
Se vc quer a pasta onde está o jar use File(".") como foi dito antes.


Eu desconfio... qual distribuição que você está usando? Qual a versão do JRE e qual o fabricante?

Eu uso Ubuntu 9.10, JRE da Sun 1.6.15. Com o seguinte programa:
public class Propriedades {

	public static void main(String[] args) {
		System.out.println("user.dir: " + System.getProperty("user.dir"));
		System.out.println("user.home: " + System.getProperty("user.home"));
	}

}
Fiz os seguintes testes (o arquivo Propriedades.java está na Área de Trabalho): [code] (..) O "user.dir", assim como especificado na documentação, deve retornar o diretório atual, independentemente do SO.

Ha uma diferença entre a User's current working directory (user.dir) e a pasta onde está o jar está executando.

No windows, a user.dir é C:\Documents and Settings\nomeDoUsuario
Os jars não têm que estar ai para serem executados. Eles vão estar em Applications\vendor\software\algumacoisa\xpto.jar

Imagine que vc tem uma pasta assim

/MyApplication
---/config
--- /data
--- app.jar

Esta pasta está algures no sistema mas vc não sabe onde.
A applicação é capaz de ler aquelas pastas com o seguinte caminho

File ("./config")

Isso indica que /MyApplication é indicada por File(".")

File(".") é a pasta de execução
user.dir é a pasta do usuário

Uma não tem nada a haver com a outra.

M

É verdade. Realmente eu tinha misturado as ideias de “working current directory” com o lugar onde está a aplicação. Podem, ou não, ser o mesmo diretório.

Malkav.Felipe

Valeu pelas respostas pessoal.

Seguinte,

Notei q se eu executar o .jar pelo terminal, user.dir retorna a pasta q ta o .jar da aplicação.

Se eu executar pelo sistema grafico, dando dois cliques no jar, só retorna a pasta da aplicação se eu executar como administrador, caso contrario, user.dir retorna a pasta de usuario.

Em ambos os casos, user.home retorna a pasta de usuario.

Mesma coisa com o File(".") . Pelo terminal funciona, pelo dois cliques no jar retorna a pasta de usuario.

Então fica a duvida: qual a diferença entre user.dir e user.home?

Uso ubuntu 9.10.

“java -version” retorna:
java version “1.6.0_16”
Java™ SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot™ Server VM (build 14.2-b01, mixed mode

instalei tanto o jre como jdk pelo Synaptic

Agradeço pela atenção e pela ajuda.

Criado 18 de junho de 2009
Ultima resposta 8 de jan. de 2010
Respostas 9
Participantes 6