Alguém sabe se existe alguma forma de um objeto saber o caminho do seu .class?
Caminho
8 Respostas
String path = getClass().getName().replace(’.’,’/’);
Mas isto não vai dar o caminho absoluto na máquina, apenas o caminho relativo… Eu queria algo do tipo /home/nomeusuario/…/arquivo.class.
isso vai retornar o caminho fisico do pacote+nome da classe.
mas a localização, acho que não tem como… tem?
[]'s
So se voce souber como o ClassLoader que voce esta usando pegou essa classe - e, sinceramente, vc nao deveria saber, ou se importar com isso. 
Pra que vc quer pegar esse caminho?
É pq tenho um arquivo que preciso ler em um ponto do programa (que roda em um servidor). Eu poderia colocar o caminho absoluto até este arquivo, afinal o servidor não é uma coisa que muda todo o dia. O problema que cada desenvolvedor utiliza máquinas com sistemas operacionais diferentes, e tb outras configurações, daí o caminho relativo seria mais jogo (até pq tem tb o CVS nesta história). Quando gravo um arquivo no disco sem caminho, só com o nome, para saber qual é a localização padrão, vejo q ele é gravado no diretório do eclipse (!!!), que é quem startou o tomcat.
Alguém tem uma idéia para resolver isto?
Se vc fizer:
File arq = new File(".");
String caminho = arq.getAbsolutePath();
Não rola :?:
Desculpe não ter respondido ainda ontem…
Seguinte, quando faço isto, ele dá o caminho do eclipse, e não o do .class…
Dado o problema original acima, acho que posso resumir assim:
-
Tenho que ler um arquivo que fica em um dado diretório da aplicação;
-
A aplicação pode ficar em diferentes diretórios, mas o caminho relativo é sempre o mesmo;
-
Como saber qual é o caminho absoluto que me leva ao arquivo (já que para as classes de arquivo de java, um caminho relativo seria um caminho relativo à quem startou a aplicação)?
Pessoal, se alguém ainda tiver alguma idéia…
Valeu!
Bom, o negócio é usar classpath. Como? Assim:
Imagine que sua app está nu diretório xyz, em qq lugar do seu sistema de arquivos. O legal seria você empacotar sua app (classes) num jar e criar o MANIFEST.MF e informar o classpath dele. Imagine que você vai criar/ler o arquivo do diretório dados, dentro de xyz. Então informe no seu Manisfest o caminho do dados no classpath:
Class-Path: dados
Com isso você pode pegar o arquivo assim:
getClass().getClassloader().getResource(“seuArquivo”);