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 */importjava.io.*;publicclassGetDiretorio{voidDir()throwsIOException{Filefile=newFile(getClass().getCanonicalName());Stringdir=file.getAbsolutePath();intponto=dir.indexOf(".");Stringnew_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
T
Tays_Cristina
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
davidbuzatto
Vc quer o caminho relativo ao seu aplicativo, e não o da fonte da linguagem do seu compilador?
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!
T
Tays_Cristina
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.