java.io.FileNotFoundException

5 respostas
java
O

Eu fiz um projeto no eclipse que está rodando perfeitamente por lá.
Porém, quando gero o jar e tento rodar por linha de comando o seguinte erro aparece:

java.io.FileNotFoundException: resources\maps\empresa (O sistema não pode encont

rar o caminho especificado)

at java.io.FileInputStream.open0(Native Method)

at java.io.FileInputStream.open(Unknown Source)

at java.io.FileInputStream.(Unknown Source)

at br.com.accenture.controller.utils.FileUtils.leMapaTxt(FileUtils.java:

62)

at br.com.accenture.controller.utils.FileUtils.carregaBase(FileUtils.jav

a:45)

at br.com.accenture.controller.utils.FileUtils.(FileUtils.java:40)
at br.com.accenture.controller.utils.TelaUtils.<init>(TelaUtils.java:17)
at br.com.aceenture.view.PanelInsercao.<init>(PanelInsercao.java:86)
    at br.com.aceenture.view.TelaForm.<init>(TelaForm.java:62)
    at br.com.aceenture.view.TelaForm.main(TelaForm.java:39)
Exception in thread main java.lang.NullPointerException

at br.com.accenture.controller.utils.FileUtils.carregaBase(FileUtils.jav

a:46)

at br.com.accenture.controller.utils.FileUtils.(FileUtils.java:40)
at br.com.accenture.controller.utils.TelaUtils.<init>(TelaUtils.java:17)
at br.com.aceenture.view.PanelInsercao.<init>(PanelInsercao.java:86)
    at br.com.aceenture.view.TelaForm.<init>(TelaForm.java:62)
    at br.com.aceenture.view.TelaForm.main(TelaForm.java:39)`

Na minha classe está assim:

private void carregaBase() {
		try {
			ObjectInputStream s = leMapaTxt("resources/maps/empresa");
			this.empresaSiglaMap = (Map<String, Map<String, Site>>) s.readObject();
			
			s = leMapaTxt("resources/maps/servico");
			this.empresaRegionalIdServicoMap = (Map<String, Map<String, Map<Double,Servico>>>)s.readObject();
			s.close();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

meu projeto esta com essa estrutura:

Como eu disse, pelo eclipse roda normal. Alguém saberia o motivo de não rodar pelo jar?

5 Respostas

S

O erro está na implementação do método leMapaTxt

Posta o código dele.

O
Então o código é esse…

`	

private ObjectInputStream leMapaTxt(String path) {

try {

File file = new File(path);

FileInputStream f;

f = new FileInputStream(file);

ObjectInputStream s = new ObjectInputStream(f);

return s;
} catch (IOException e) {
		e.printStackTrace();
	}
	JOptionPane.showMessageDialog(null, "O programa foi finalizado com erro");
	return null;
}`

como falei, no eclipse roda certinho

S

Tente passar como parametro o caminho completo deste arquivo dentro do seu computador

Se vc está executando no Windows:
ObjectInputStream s = leMapaTxt("C:\camindo_do_seu_software\resources\maps\empresa");

Se vc está no Mac ou no Linux:
ObjectInputStream s = leMapaTxt("/camindo_do_seu_software/resources/maps/empresa");

O

Então, mas eu não queria que o caminho ficasse preso ao lugar onde está o jar. Como faço pra colocar o arquivo dentro do programa ?

R

Dê uma pesquisada no método abaixo:

Thread.currentThread().getContextClassLoader().getResourceAsStream(seu_arquivo_aqui);

O método retorna um InputStream.
Utilizo este cara para carregar arquivos pre-definidos aos quais estão armazenados como resource da minha aplicação. Funciona perfeitamente pra mim.

Criado 22 de dezembro de 2016
Ultima resposta 23 de dez. de 2016
Respostas 5
Participantes 4