Problema para ler arquivo de texto

E ae galera, estou precisando de ajuda…

Eu estou montando uma ferramenta que leia o conteúdo de um arquivo .DOC.
Já tentei convertei ele para RTF e o que aconteceu foi o seguinte:

*Antes de mais nada, minha ferramenta, você só indica o caminho num textfield auxiliado por um button que tem o JFileChooser e quando você aperta um botão, ela gera um outro arquivo em outro lugar
** já tentei também editar na tela mas acontece a mesma coisa

JTextPane editor = new JTextPane();
// Tentei com JEditorPane também e o resultado foi o mesmo

StyleContext sc = new StyleContext();
sc.getStyle( StyleContext.DEFAULT_STYLE );
DefaultStyledDocument doc = new DefaultStyledDocument( sc );

try {
    // Arquivo DOC
    editor.read( new FileInputStream( "C:\\<caminho>\\teste.doc" ), doc );
    // Arquivo RTF
    editor.read( new FileInputStream( "C:\\<caminho>\\teste.rtf" ), doc );

    System.out.println( editor.getText() );
}
catch ( IOException ex ) {
    System.out.println( "Erro na leitura do arquivo" + ex.getMessage() );
}

Já tentei gerar um Document, também usei o RTFEditorKit, cheguei nos mesmos resultados, o problema deve estar com o HTML:


Arquivo DOC - O texto aparece normalmente, mas quando tem negrito, itálico, sublinha ou tabela, ele “desformata” tudo, aparecendo quadrados, símbolos estranhos, etc…

Arquivo RTF - O texto fica cheio de contra-barra com tags muito estranhas, por exemplo: \pard\qc\par \tab
e os acentos não aparecem

como minha ferramenta varre o texto e nele tem tabela, ele não encontra as tags (\n, \t, etc) por causa dos quadradros e símbolos no DOC e as várias tags (\par) no RTF ( teria que fazer um tratamento necessario para cada uma ), resumindo, queria abrir o documento como ele é no MWord ou WordPad, não preciso das tags HTML da tabela em si, apenas da tabulação ‘\t’ e quebra de linha ‘\n’, etc.

Será que a classe do pacote: org.apache.poi.hwpf.extractor.WordExtractor resolve meu problema?

Se alguém quiser e pude tentar me ajudar, desde já agradeço, qualquer coisa eu explico melhor o que eu preciso!

Amigo da uma olhada no Apache POI, acho que pode te ajudar com os arquivos .doc.

http://poi.apache.org/

Para rtf voce pode ver o pacote javax.swing.text.rtf

http://java.sun.com/javase/6/docs/api/javax/swing/text/rtf/package-summary.html

Abraços.

aconselho vc usar o Apache POI tmb, mas do jeito que vc está fazendo, utilize ao menos classes encapsuladas com BufferedRead…

public boolean gravar(InputStream in, String fileName) throws Exception{		
		boolean gravado = false;
		String destino = "C://";
		
		try {
			BufferedInputStream bufferIn = new BufferedInputStream(in);
			
			File file = new File(destino + fileName);
			file.createNewFile();
			
			OutputStream bos = new FileOutputStream(file);
			
			int teste = 0;
			while ((teste = bufferIn.read()) != -1) {
				bos.write(teste);		
            }			
			
			in.close();
			bufferIn.close();
			bos.close();
			
			gravado = true;
			
		} catch (Exception e) {
			throw new Exception(getClass().getSimpleName() + " : " + e.getMessage()); 
		}	
		
		return gravado;
	}	

Inverte suas barras !!!

E aí galera, quero agradecer a força que vocês me deram, princiopalmente ao método grava do sfing… só que eu acho que não deixei bem definido, ainda estou com um problema:

Eu obrigatóriamente tenho um arquivo do word com uma tabela

Fazendo na mão
1º Procedimento: eu abro o arquivo .DOC e abro um bloco de notas, daí eu seleciono o conteúdo do .DOC, CTRL+C e CTRL+V no bloco de notas, ele trata a tabela com \t´s e \n´s

Para a minha ferramenta ficou perfeito esse arquivo txt, agora eu gostaria de saber, tem como eu fazer com que o java fizesse este 1º Procedimento, sem nada manual e sem o usuário da ferramenta perceber que isso foi feito, antes de iniciar a leitura do documento???

Através do método grava eu consegui gravar o conteúdo do .DOC no .TXT, mas ficou “zuado” do mesmo jeito como eu fizesse o java ler o .DOC direto

valeu pessoal!

Não entendi o que você precisa fazer …

O método que criei abre o arquivo especificado e le linha por linha e grava linha por linha em outro arquivo que você mesmo estipula !
Este método faz a copia perfeita se copiar arquivo .* para .*, ele copia o arquivo de um diretorio para outro !

explica de forma mais simples o que precisa fazer !

Então sfing, eu fiz umas alterações no que preciso, eu entendi seu método, fiz ele, mas ainda está dando uns problemas…

vamos lá que eu te explico…

Minha ferramenta está pronta, mas ela só funciona se:
Fazendo na mão, nada em código
Eu abro o arquivo .DOC, seleciono tudo e copio, eu abro o WordPad e colo o conteúdo lá, fica identicamente igual ao conteúdo do .DOC e daí eu salvo como .RTF.
Se eu abrir o arquivo .RTF que eu fiz com o bloco de notas, aparece um monte de tag por exemplo: \b0, \cell, e é o que eu preciso.

Minha ferramenta só funciona pra arquivos que estejam formatados em .RTF manja, tem como eu fazer esse procedimento que eu descrevi acima, só que em código, ou seja, o usuário só informa o caminho do arquivo DOC??? dai o que eu descrevi acima, o java se vira???

eu não preciso na verdade gerar um RTF, basta formatar o DOC para o padrão RTF entende???

OBS.: Seu método funcionou e eu usei ele pra gerar um arquivo RTF, funcionou, mas quando eu mandei o Java ler esse RTF, a formatação dele está identica ao do word ( aberta em código quando o java lê ), ou seja, tanto o RTF quanto o DOC estão vindo completamente iguais, cheio de quadrados, y com trema, enfim, padrão porcaria da microsoft, ele não fez exatamente igual a conversão…

então cara, não sei se fui mais claro na minha descrição, mas se você puder continuar dando uma força ae!!! eu agradeço!!!

Bom !
Se entendi direito ai vai !

package com.autofax.helpdesk.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.swing.JFileChooser;

public class UpLoadFileUtil {

	public boolean gravar(InputStream in, String fileName) throws Exception{		
		boolean gravado = false;
		String destino = "C://";
		
		try {
			BufferedInputStream bufferIn = new BufferedInputStream(in);
			
			File file = new File(destino + fileName);
			file.createNewFile();
			
			OutputStream bos = new FileOutputStream(file);
			
			int teste = 0;
			while ((teste = bufferIn.read()) != -1) {
				bos.write(teste);		
            }			
			
			in.close();
			bufferIn.close();
			bos.close();
			
			gravado = true;
			
		} catch (Exception e) {
			throw new Exception(getClass().getSimpleName() + " : " + e.getMessage()); 
		}	
		
		return gravado;
	}	
	
	public static void main (String [] args) throws Exception{
		
		UpLoadFileUtil up = new UpLoadFileUtil();
		
		
		JFileChooser chooser = new JFileChooser();
	    chooser.showOpenDialog(null);
	    File file = new File(chooser.getSelectedFile().getPath());
		InputStream in = new FileInputStream(file);
		up.gravar(in, "nome.RTF");
		
	}	
}

E ae sfing… agradeço mesmo o apoio… valeu…

funcionou o que você me passou, mas acontece que a microsoft deixou o padrão do word fechado, quando ele faz a leitura do DOC pro RTF, ta vindo dessa maneira:


1º - ÐÏࡱá : : ?# ÿÿÿÿÿ

Enquanto que se eu faço esse procedimento na mão, salvar o DOC como o RTF e daí eu jogo esse último pra minha ferramenta, vem assim:


2º - \rtf1\ansi\ansicpg1252\deff0

que é como minha ferramenta foi configurada pra trabalhar…

o word não mantem o padrão, isso aconteceu pra html também… tentei usar o POI mas a formatação vem do mesmo jeito que está o 1º…

minha decisão temporária foi ficar salvando o DOC como RTF na mão até descobrir como fazer isso pelo POI ou sair algum jeito que faça isso…

você sabe usar o POI???

valeu cara!!!

Não faço ideia do que é isso !

Então você quer apenas mudar o tipo do arquivo, bom se é isso, nunca fiz e não via algo parecido, mas acho que deve ser facil, tenta apenas mudar o nome do arquivo atravéz de java !!

Quando é que o Office 2007 ou o OpenOffice vão tornar-se populares nos escritórios? Ambos usam formato XML + ZIP e seriam muito mais fáceis de processar em Java :stuck_out_tongue:

Nunca usei acima do 2003… nao sabia disso!! bom saber… (XStream :twisted: )
O que seria o “+ ZIP” ?

jopss

Valeu ae pessoal…

Então thingol, concordo com você, essa ferramenta é pra um escritório, lá é Office 2003… em casa eu fiz o teste com o Open Office e junto de um camarada fiz com o Office 2007… muito mais fácil fazer o java entender o XML + ZIP sem precisar descaracterizar o Word…

Bom, responendo ao jopss, XML + ZIP quer dizer que ele gera um arquivo ZIP com o XML do documento, pelo que entendi da sua pergunta e pelo o que entendi de XML + ZIP.

bom galera, valeu da força ae, ficou daquele jeito mesmo, salvar o DOC como RTF no salvar como do WORD…
Ficou assim porque eu só posso usar a lib do Java, o POI mais o HWSF são projetos do apache, mas está valendo…

Abraço!