Descobrir caminho da aplicação

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

tente isso

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

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

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

[quote=jctosta]Tenta isso que é melhor e não precisa criar objetos:

String dir = System.getProperty("user.dir"); [/quote]

magavilha

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;

[quote=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 .

[/quote]

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

[quote=sergiotaborda][quote=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 .

[/quote]

Isso está certo. É isso mesmo que tem que retornar.
Se vc quer a pasta onde está o jar use File(".") como foi dito antes.[/quote]
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.

[quote=marcobiscaro2112][quote=sergiotaborda][quote=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 .

[/quote]

Isso está certo. É isso mesmo que tem que retornar.
Se vc quer a pasta onde está o jar use File(".") como foi dito antes.[/quote]
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.[/quote]

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.

É 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.

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.