Nao estou conseguindo pegar o caminho do projeto exemplo quero /src/revistas

33 respostas
M

oi. por favor pode me ajudar?

nao conseguindo pegar o caminho do projeto exemplo quero /src/revistas. tenho dois projetos, o revistas e o projeto executar. quando vou no projeto executar e executo a classe Main ele pega o caminho absoluto desse projeto, mas quero do projeto revistas, entendem?

33 Respostas

steveVai

posta seu código aqui… assim fica mais fácil.

Abs

M

ja tentei de tudo

System.out.println(getClass().getResource("src/br/uol/revistas/imagens/ícone_uol_rev.png").getPath());

da nullpointer

M

URL Diretorio = this.getClass().getResource("/src/br/uol/revistas/imagens"); System.out.println(Diretorio.getPath());

da nullpointer tambeimn

M
tambem gera exceção
public class Teste {
	public static void main(String[] args) throws IOException {
		 
	 new Teste(). teste();
	  }
	

void teste() throws IOException{


InputStream stream =                   
getClass().getResourceAsStream("C:/Users/mariafs/Desktop/Eclipse Juno/revistas/src/br/revistas/imagens");


try {

	OutputStream out = new FileOutputStream(new File("c:\\teste.png"));
 
	int read = 0;
	byte[] bytes = new byte[1024];
 
	while ((read = stream.read(bytes)) != -1) {
		out.write(bytes, 0, read);
	}
 
	stream.close();
	out.flush();
	out.close();
 
	System.out.println("New file created!");
    } catch (IOException e) {
	System.out.println(e.getMessage());
    }

Desktop.getDesktop().open(new File("c:\\teste.png"));

}

		
		
	
}
Exception in thread "main" java.lang.NullPointerException
M

ja tentei de tudo System.out.println(new File(this.getClass().getResource("./src").toURI().getPath())); nada funciona, sera problema no java?

steveVai

Olá vamos ver se entendi o seu caso.
Está estranho pois no seu código você coloca um caminho que corresponde o local onde está seu código fonte “.java”, porém você utiliza o getClass().getResourceAsStream que sempre irá retorna o diretório onde está armazenado seus arquivos .class.
Dessa forma não vai funcionar.

Caso queira ler as imagens do local onde estão seus arquivos .class, você não coloca o caminho do diretório e sim especifica somente o arquivo que queira ler. Exemplo:

InputStream origem = getClass().getResourceAsStream("JList.png");

Se desejar ler realmente as imagens do local onde estão seus fontes “.java”, me diga ai vou pesquisar aqui como recupera esse caminho. Mas para não deixar você na mão segue uma alternativa não muito correta do ponto de vista de programação, porém “quebrará se galho”.

String file = "/src/testes";
  System.out.println(System.getProperty("user.dir") + file) ;

Abraços

R
this.getClass().getResource("br\\uol\\revistas\\imagens");

?

A

Ao invés do getResource use o ./.

Ex: ./src/br/uol/revistas/imagens

Tem que funcionar, pois uso desta forma aqui.

M

wellington.nogueira:
mariazinhahappy:
URL Diretorio = this.getClass().getResource("/src/br/uol/revistas/imagens"); System.out.println(Diretorio.getPath());

da nullpointer tambeimn

O que retorna quando você chama esse mesmo comando passando uma String vazia?

URL Diretorio = this.getClass().getResource(""); System.out.println(Diretorio.getPath());
Aliás, se não me engano, não pode usar o / no início da string (se eu estiver certo, o Java entenderia como C:\src…)

Normalmente não é boa prática apontar para a pasta src dentro do código pois, ao gerar o compilado, essa pasta costuma NÃO acompanhar o sistema.

quando uso URL Diretorio = this.getClass().getResource(""); System.out.println(Diretorio.getPath()) ai mostra o caminho ate o bin, mais nao da para abrir porque tem um monte de % no meio

M

andredecotia:
Ao invés do getResource use o ./.

Ex: ./src/br/uol/revistas/imagens

Tem que funcionar, pois uso desta forma aqui.

assim funcionou mesmo. obrigada.

so que agora fiquei com duvida de fazer da outra maneira funcionar… fiquei 1 semana e 2 dias so tentando funcionar e nao consegui

M

na verdade nao sei o acontece na verdade nenhuma das formas acima consegui funcionar de verdade alguem ainda pode me ajudar? ??

M

porque aparece um monte dee %%%???

R

use o File.separator, do Java, pois se seu sistema for para um linux ou vice-versa voce tera problemas de caminho.

M

steveVai:
Olá vamos ver se entendi o seu caso.
Está estranho pois no seu código você coloca um caminho que corresponde o local onde está seu código fonte “.java”, porém você utiliza o getClass().getResourceAsStream que sempre irá retorna o diretório onde está armazenado seus arquivos .class.
Dessa forma não vai funcionar.

Caso queira ler as imagens do local onde estão seus arquivos .class, você não coloca o caminho do diretório e sim especifica somente o arquivo que queira ler. Exemplo:

InputStream origem = getClass().getResourceAsStream("JList.png");

Se desejar ler realmente as imagens do local onde estão seus fontes “.java”, me diga ai vou pesquisar aqui como recupera esse caminho. Mas para não deixar você na mão segue uma alternativa não muito correta do ponto de vista de programação, porém “quebrará se galho”.

String file = "/src/testes";
  System.out.println(System.getProperty("user.dir") + file) ;

Abraços

steve voce e muito inteligente testei o que voce disse e funcionou nossa eu nao tinha lido direito desculpa … voce tgambem disse qeu essa nao era a melhor forma… porquenao é?

M

alguem ?

B

Vamos por partes…

Esse getClass vai pegar a classe onde você está chamando o teu código. Duas perguntas:

getClass().toString() imprime o que?
Qual o nome da tua classe e o package onde ela se encontra?

M

Bruno Laturner:
Vamos por partes…

Esse getClass vai pegar a classe onde você está chamando o teu código. Duas perguntas:

getClass().toString() imprime o que?
Qual o nome da tua classe e o package onde ela se encontra?

o problema e muito estranho, faço no eclipse aqui em casa e funciona mas no eclipse do serviço so da nullpointer o mesmo metodo pois nao acha o caminho, do projeto A quero acessar a imagem que esta no projeto B mas nao acha porem se coloco a imagem no projeto A tambem dai funciona

M

Bruno Laturner:
Vamos por partes…

Esse getClass vai pegar a classe onde você está chamando o teu código.


como assim

??

o nome da classe que estou chamando executando

B

Um projeto de exemplo para você entender como funciona essa pesquisa de recursos.

Basicamente ele procura pelo recurso dentro do classpath onde o teu programa está rodando, com endereços relativos ou absolutos à classe por onde você está chamando o getResourceStream. Se você chamasse esse método de outra classe em outro pacote, o caminho relativo mudaria.

Note que dentro desse projeto, eu configurei o jar para estar no mesmo classpath da aplicação quando ela roda no Eclipse.

M

o problema acontece quando executo de outro projeto, dai ele pega o caminho do outro projeto, nao?

M

e tambem imprimi um monte de %%%% no meio da url

B

Pode postar qual pedaço do teu código imprime isso?

M
System.out.println(ConstrucaoRevistas.class.getClass().getResource("/").getFile());

imprime:

/C:/Users/maria/Desktop/Kit%20Automatiza%c3%a7%c3%a3o%20de/Eclipse%20Juno%20com%20integra%c3%a7%c3%a3o%20SVN/Reposit%c3%b3rio/Revistas/bin/

deveria pegar o resource/src, nao?

A

Pelo q entendi vc vem tentando opções diversas e nenhuma realmente funcionou, como estas:

URL resource = classLoader.getResource("/");
URL resource = SOME_CLASS.class.getResource("/");
URL resource = this.getClass().getResource("/");

Fonte: http://www.coderanch.com/t/463550/java/java/determine-current-path-classloader

Está dando NullpointerExceptoin ou vindo o caminho c/ representação porcentagem (ex: %20 q equivale ao espaço)

B

Dá uma olhada na pasta bin do teu projeto no Eclipse, lá ficam os arquivos java já compilados como .class.

bin é a raiz do teu classpath, e é de lá que o Eclipse roda o teu programa. Note que não existe src dentro desse bin.

Se por exemplo você tiver a classe br.com.minhaempresa.ConstrucaoRevistas, dentro do bin deve ter as pastas br/com/minhaempresa com um ContrucaoRevistas.class dentro dela.

Se você colocar um arquivo texto em bin, tipo bin/texto.txt e você fizer

ConstrucaoRevistas.class.getClass().getResource("/texto.txt"), este pedaço de código vai retornar o URL desse texto.txt

Se você colocar outro arquivo texto, em outro lugar dentro de bin, por exemplo em bin/resources/texto2.txt e fizer:

ConstrucaoRevistas.class.getClass().getResource("/resources/texto2.txt"), ele pega esse texto2.txt

Se você colocar outro arquivo texto, em outro lugar dentro de bin, por exemplo na mesma pasta onde está o teu ConstrucaoRevistas.class:

bin/br/com/minhaempresa/texto3.txt
ConstrucaoRevistas.class.getClass().getResource(“texto3.txt”), ele pega esse texto3.txt. Não precisa colocar a pasta onde ele está por que ele se encontra no mesmo nível do .class.

M

nao sei mais oque faço quando coloco o exemplo que voce deu em um System.out.print(url); imprime null fiz exatament o que voce pediu

B

Me diz duas coisas:

  1. Dentro da pasta bin dentro do teu projeto, qual é o caminho (br/uol/…) até chegar ao arquivo .class da classe onde está o teu código?
  2. Voltando para bin, qual o caminho até o arquivo de imagem que você está querendo pegar?
M

c:/eclipse%20da%20mari/workspace/projeto%20revistasExecucao/bin/br/uol/revistas/Principal.class

c:/eclipse%20da%20mari/workspace/projeto%20revistasExecucao/bin/br/uol/revistas/uolLogo.png

B

Então tenta o seguinte:

getClass().getResource("/br/uol/revistas/uolLogo.png")

M

Bruno Laturner:
Então tenta o seguinte:

getClass().getResource("/br/uol/revistas/uolLogo.png")

imprimi null

B

Ok, se isso deu errado, então não tenho mais nenhuma idéia de como arrumar o teu problema :lol:

A

Vamos lá, esclareçamos as questões:

1 - Exceção Nullpointer neste caso é lançado qdo. não se encontra o arquivo;

2 - Estão aparecendo porcentagem e etc pelo fato de sua workspace o caminho completo possuir espaços e acentos, definitivamente
evite pois já tive problemas de perder horas e no final era um mldt* acento, sério! Hehehe…

E 3 - Recomece passo-a-passo conforme orientamos aqui nos posts q tem de funcionar.

Ok?

WellingtonRamos

mariazinhahappy:
URL Diretorio = this.getClass().getResource("/src/br/uol/revistas/imagens"); System.out.println(Diretorio.getPath());

da nullpointer tambeimn

O que retorna quando você chama esse mesmo comando passando uma String vazia?

URL Diretorio = this.getClass().getResource(""); System.out.println(Diretorio.getPath());
Aliás, se não me engano, não pode usar o / no início da string (se eu estiver certo, o Java entenderia como C:\src…)

Normalmente não é boa prática apontar para a pasta src dentro do código pois, ao gerar o compilado, essa pasta costuma NÃO acompanhar o sistema.

Criado 4 de fevereiro de 2013
Ultima resposta 4 de fev. de 2013
Respostas 33
Participantes 6