Diretório da aplicação

Olás,

estou acabando de escrever um compilador e começando a me preocupar com a distribuição. O problema é que o compilador deve ficar no PATH do usuário, e ele o chamará de qualquer lugar, como é feito com o javac, e eu preciso acessar arquivos que estão no diretório do compilador (alguns arquivos com definições da linguagem, etc)

Como eu posso descobrir o caminho da aplicação durante a execução (não é o ‘.’, é o lugar onde as classes do meu programa estão!)?

Obrigada,
Tays

Tenta ai:

/*
 * Este exemplo esta pegando o diretorio deste arquivo
 */

import java.io.*;

public class GetDiretorio {
	
	void Dir() throws IOException{
		
		File file = new File(getClass().getCanonicalName());
		String dir = file.getAbsolutePath();
		
		int ponto = dir.indexOf(".");
		String new_dir = dir.substring(0, ponto)+"\"+dir.substring(ponto+1,dir.length());
		
		System.out.println(new_dir);
		
	}
	
	public static void main(String[] string) throws IOException{
		
		new GetDiretorio().Dir();
		
	}

}

Num testei, mas eu acho q da certo.

Boa Sorte

Oi m4des

O getCanonicalName() retorna o nome da classe, mas chamar o getAbsolutePath() no File criado retorna o diretório atual (".") concatenado ao nome da classe…por exemplo, se eu rodar em C:, o string mostrado é “C:\GetDiretorio”

Obrigado pela dica mas ainda não é isso :cry:

Vc quer o caminho relativo ao seu aplicativo, e não o da fonte da linguagem do seu compilador?

Já tentou o

getClass().getResource( "caminhoRelativoOuAbsoluto" )

Acho q não entendi seu problema corretamente…

davidbuzatto, o “caminhoRelativoOuAbsoluto” só funciona se o caminho passado for absoluto ou relativo ao diretório atual em que o programa foi executado (".")

O que eu preciso descobrir é exatamente o diretório onde estão os arquivos do compilador, e não o diretório atual

Valeu!

Olás,

resolvi o problema colocando o arquivo que eu preciso carregar dentro de um JAR que fica no classpath da aplicação. Assim eu consigo carregá-lo usando getClass().getClassLoader().getResourceAsStream() sem precisar definir o caminho do arquivo.

Obrigada pela ajuda!