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!)?
/*
* 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();
}
}
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”
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
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.