.jar que leia arquivo .txt que seja repassado a ele

2 respostas
F

Olá Pessoal,

Primeiro: já naveguei 3 horas pesquisando aqui e mais 2 pela internet e encontrei vários tópicos sobre leituras de arquivos dentro e fora de pacotes .jar, nenhum descreve meu problema. Também pesquisei em inglês em outros fóruns em outras horas, também nada.

Segundo: gostaria de saber de vocês se tem alguma ideia sobre isso:

Estou desenvolvendo uma biblioteca de programação para manipular ontologias, quero gerar um .jar para que outras pessoas possas utilizar em seus projetos inserindo-o no build path, ok.

O problema é que eu quero instanciar um objeto da minha classe principal e passar o caminho do txt nessa instanciação.
- Não quero incluir o txt dentro do .jar.
- Não quero deixar o txt junto do diretório do projeto.

Então para isso eu tenho um conjunto de classes onde é necessário que o programador inicie por:

Mediator med = new Mediator(ontologia,"C:/Users/Usuario/workspace/teste.txt",1);
med.getKnowledgeRelation();

Ignorem ontologia, atentem para o caminho do txt.

Quando o .jar é usado dá uma série de erros quando chega nessa parte abaixo:
File file = new File(this.archive);
		InputStream reading;
		try {
			reading = new FileInputStream(file);
		
			InputStreamReader rLection = new InputStreamReader(reading);
			BufferedReader bLection = new BufferedReader(rLecture);
			
			String txtLector = bLecture.readLine();
			while(txtLector  != null){
				maxRows++;
				txtLector = bLecture.readLine();
			}
			bLecture.close();
			rLecture.close();
			reading.close();
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

Onde no this.archive consta quela String com o caminho do txt. Dependendo dos projetos que andei testando, ocorre um dos dois grupos de exceções:

1.
java.io.FileNotFoundException: (A sintaxe do nome do arquivo, do nome do diretório ou do rótulo do volume está incorreta)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:120)
	at ontocomAgent.communication.AgentMsgConversion.countFileRows(AgentMsgConversion.java:111)
	at ontocomAgent.communication.AgentMsgConversion.getMessageArray(AgentMsgConversion.java:203)
	at ontocomAgent.communication.Communication.getContent(Communication.java:61)
	at ontocomAgent.mediator.Mediator.getKnowledgeRelation(Mediator.java:202)
	at ontology.ontotest.execute(ontotest.java:29)
	at jason.asSemantics.TransitionSystem.applyExecInt(TransitionSystem.java:632)
	at jason.asSemantics.TransitionSystem.applySemanticRule(TransitionSystem.java:213)
	at jason.asSemantics.TransitionSystem.reasoningCycle(TransitionSystem.java:1186)
	at jason.infra.centralised.CentralisedAgArch.run(CentralisedAgArch.java:205)
	at java.lang.Thread.run(Thread.java:662)
2.
java.lang.NullPointerException
	at java.io.Reader.<init>(Unknown Source)
	at java.io.InputStreamReader.<init>(Unknown Source)
	at ontocomAgent.communication.AgentMsgConversion.countFileRows(AgentMsgConversion.java:116)
	at ontocomAgent.communication.AgentMsgConversion.getMessageArray(AgentMsgConversion.java:207)
	at ontocomAgent.communication.Communication.getContent(Communication.java:61)
	at ontocomAgent.mediator.Mediator.getKnowledgeRelation(Mediator.java:202)
	at userAgent.setup(userAgent.java:30)
	at jade.core.Agent$ActiveLifeCycle.init(Agent.java:1522)
	at jade.core.Agent.run(Agent.java:1468)
	at java.lang.Thread.run(Unknown Source)

Meu projeto é este ontocomAgent. Sendo que no projeto deste .jar, no Eclipse, tudo está rodando normal, sem erros, é na utilização do .jar mesmo que tudo explode, hehe.
O que já verifiquei:
- Já havia verificado permissões aqui no win7 e repassei todas (estou executando o ambiente como Admin também).
- Tentei getResourceAsStream, getClass, outras funções para ler arquivos e nada, nada mesmo. As vezes, dependendo do código, até funciona, mas larga as exceções do mesmo jeito (bruxaria).
- Já verifiquei se estou utilizando algo como null também em todas as classes, por causa do NullPointerException.
- Obviamente já verifiquei se o caminho e o nome do arquivo poderiam estar errado, está tudo ok porque funciona de boa enquanto desenvolvo a lib.

Estou achando que existe uma limitação aí, o que acham?

2 Respostas

Marcelo_SCS

Eu testei aqui, e funcionou de boa.

Acredito que o código esteja errado, deveria ser:

File file = new File(this.archive);  
        InputStream reading;  
        try {  
            reading = new FileInputStream(file);  
          
            InputStreamReader rLection = new InputStreamReader(reading);  
            BufferedReader bLection = new BufferedReader(rLection);  
              
            String txtLector = bLection.readLine();  
            while(txtLector  != null){  
                maxRows++;  
                txtLector = bLection.readLine();  
                System.out.println(txtLector);
            }  
            bLection.close();  
            rLection.close();  
            reading.close();  
          
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }

Você está lendo de um :

String txtLector = bLecture.readLine();

Ao invés de ler de:

String txtLector = bLection.readLine();
F

Olá Marcelo, acredito que eu possa ter escrito algo errado, fui escrevendo o código aqui, não copei e colei, mas de qualquer forma aqui funciona normal também, problema é que o .jar da minha aplicação que faz umas bruxarias, eu pedi pros admins excluírem esse tópico que está duplicado, a discussão está em: http://www.guj.com.br/java/289354-jar-que-leia-arquivo-txt-que-seja-repassado-a-ele#1537309

Criado 10 de dezembro de 2012
Ultima resposta 30 de dez. de 2012
Respostas 2
Participantes 2