Problemas ao ler um .doc

Bom dia,
Estou utilizando o seguinte metodo para ler um .doc em um sistema web:

       //conexao com o ftp
       ...

       InputStream in = //arquivo do ftp

	HWPFDocument doc = new HWPFDocument(teste);
	WordExtractor extrair = new WordExtractor(doc);
	String conteudo = extrair.getText();
	conteudo = conteudo.replace("\n", " ");

Na primeira vez que executo o metodo, ele me retorna o conteudo do documento mas, caso eu tente executar novamente da o seguinte erro:

         java.io.IOException: Invalid header signature; read 0x11CF0000000000D0, expected 0xE11AB1A1E011CFD0

para que eu possa utilizar este metodo novamente eu tenho que dar um restart no servidor, a impressão que tenho é que esta fazendo bagunça na memoria do servidor.
Alguém tem ideia do que possa ser?

Valeu!!!

Boa tarde.

Pelo o que vejo, está utilizando a API POI ou estou enganado?
Então, uma pergunta, está instanciando a cada requisição o seu InputStream?

Abraços!

vou deixar de ser preguiçoso e enviar o metodo todo:

String caminho = "caminho_ftp";
		String texto = "";
		String conteudoNovo = "";
		FTPClient ftp = new FTPClient();  
	    try {
		   	ftp.connect(endFtp);
			ftp.login(usuarioFtp, senhaFtp);
		   	ftp.changeWorkingDirectory(caminho);
		   	
		   	InputStream teste;
		   	teste = ftp.retrieveFileStream(nomeUm);
		   	
		   	HWPFDocument doc = new HWPFDocument(teste);
			WordExtractor extrair = new WordExtractor(doc);
			String conteudo = extrair.getText();
			conteudo = conteudo.replace("\n", " ");
			conteudoNovo = conteudoNovo.concat(conteudo);
		   	
			teste.close();
			teste = null;
			doc = null;
			extrair = null;
		   	ftp.logout();
		   	ftp.disconnect();
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}  

a impressão que fica é esta mesmo, que esta usando o mesmo…

Boa noite.

Antes de mais anda, se toda vez que chama seu método você instancia algumas variavéis, porque faz elas receberem null ao fim do bloco de código? Concorda, que isto é totalmente desnecessário? Faça as seguintes mudanças e nos mostre os resultados:

[code]
String caminho = “caminho_ftp”;
String texto = “”;
String conteudoNovo = “”;
FTPClient ftp = new FTPClient();
try {
ftp.connect(endFtp);
ftp.login(usuarioFtp, senhaFtp);
ftp.changeWorkingDirectory(caminho);

	   	InputStream teste = ftp.retrieveFileStream(nomeUm);
	   	
	   	HWPFDocument doc = new HWPFDocument(teste);
		WordExtractor extrair = new WordExtractor(doc);
		String conteudo = extrair.getText();
		conteudo = conteudo.replace("\n", " ");
		conteudoNovo = conteudoNovo.concat(conteudo);
	   	
		teste.close();			
	   	ftp.logout();
	   	ftp.disconnect();

	} catch (SocketException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} [/code]

Esqueci de comentar algo, veja se está retornando corretamente um InputStream do seu método. Abraços!

Então, fiz as alterações e da o mesmo problema.

Quando executo dá o erro e acusa esta linha como sendo o erro

 HWPFDocument doc = new HWPFDocument(teste); 

Seria alguma instabilidade da api?

Boa tarde.

Instabilidade da API POI é bem difícil, lógico que pode acontecer mas não creio que seja este o caso. Depende também de como sua classe FTP está implementada, principalmente o método que retorna o InputStream que é alocado ao construtor do HWPFDocument.

Eu usei para extrair dados de arquivos .xsl (excel) e não houve problemas, apenas algumas dificuldades.
Talvez este link ajude você:

http://poi.apache.org/hwpf/quick-guide.html

E este contém exemplos:

http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/

Caso resolva o seu problema poste o resultado e [RESOLVIDO] ao lado do seu Post, já que esta dúvida pode ser de várias outras pessoas correto?

Abraços!! :smiley: