Leitura de Aquivo txt

7 respostas
A

Olá pessoal.

Estou tentando fazer um projeto, onde preciso ler de um arquivo texto, mas antes estou fazendo alguns teste.

Nesse codigo abaixo, a chamada ao metodo (file.isDirectory()) sempre está dando como falsa e eu ja criei no c: um arquivo no bloco de notas com o nome entrada.

O instancia a classe FileReader também não está funcionando. Pode ser devido ao diretorio está falhando.

import java.util.*;
import java.io.*;
import javax.swing.JOptionPane;

public class Teste {	

public Teste() {		
	}
		
	 
 public static void main (String[] args){
		 
	 File file = new File ("c:\\entrada.txt");
		 
	 boolean resposta = file.exists();
	 boolean resposta2 = file.isDirectory();
	 boolean resposta3 = file.isFile();
		 
	 FileReader reader = new FileReader (file);
	
	 StringTokenizer token = new StringTokenizer("Valeu galera");
			
	 String n1 = token.nextToken();
	 String n2 = token.nextToken();
		 		
	System.out.println(resposta);
	System.out.println(resposta2);
	System.out.println(resposta3);
	
 }

}

[color="red"][size="9"]* Utilize BBCode em seus posts e aumente as chances de resposta - Guilherme Mello[/size][/color]

7 Respostas

I

OK, mas “entrada.txt” é um arquivo ou diretório? Se ele volta falso presume-se que seja um arquivo. Se colocar o erro com o FileReader fica mais fácil. Outra coisa, na hora de especificar o caminho do arquivo, use-o como no linux:

T+

A

Tem razão. Olhei a api e percebi que o metodo testa se é um diretório ou não. Como se tratava de um arquivo ele respondia false.

Dê uma olhada neste codigo, não consigo fazer a classe StringTokenizer receber as informações que estão no arquivo entrada.txt.

package Main;
import java.util.*;
import java.io.*;

public class Teste {

	public Teste() {		
	}
	
	public static void main (String[]args) throws IOException{
		
		File file = new File ("/c:/entrada.txt");			
		
	FileReader reader = new FileReader(file);
	BufferedReader leitor = new BufferedReader(reader);
		
	String fila = String.valueOf(leitor);
		
		StringTokenizer token = new StringTokenizer(fila);
		
		String valor = token.nextToken();				
		boolean valor3= token.hasMoreTokens();
	
		//teste			
		System.out.println (valor);
		System.out.println (valor3);
			
	}		
				
}

[color="red"][size="9"]* Utilize BBCode em seus posts e aumente as chances de resposta - Guilherme Mello[/size][/color]

I

O problema é como estais lendo o arquivo. Quando tu faz isto,

String fila = String.valueOf(leitor);

Estais pegando a referência do reader e não o conteúdo dele. Teria de ser algo do tipo:

private void read(File file) throws IOException {
    final BufferedReader buffer = new BufferedReader(new FileReader(file));
    final StringBuilder builder = new StringBuilder();
    String aLine;
    while ((aLine = reader.readLine()) != null) {
         builder.append(aLine);
    }

    StringTokenizer token = new StringTokenizer(builder, " ");
    while (token.hasMoreTokens()) {
        System.out.println(token.nextToken());
    }
    reader.close();
}

Outra coisa que está faltando é o tipo de separador para o Tokenizer. Por default é espaço, mas é isto mesmo que tu precisa? T+

W
dar uma olhada nestes 3 metodos que eu te postei, deve tirar algumas das suas duvidas.
public void gravarDadosArquivo(RespostaConsultaParamConveniadas respConsParamConv, String nomeArquivo){
		CSIDebug
		.println("TratadorConsiteTransmiteBalanco::gravarDadosArquivo:: ENTROU");
		try {
			String dir = "";
			String diretorio = "";
			File file = null;
			FileWriter fw = null;
			try {
				dir = ParametrosGerais
				.getDescricao(DIRETORIO_ARQUIVO_PARAMETROS_CONVENIADA)+"teste"+File.separator;
			} catch (ExcecaoObjetoInexistente e) {
				CSIDebug
						.println("##TratadorConsiteTransmiteBalanco :: gravarDadosArquivo --> Diretorio não encontrado"
								+ e);
			}
			File fileDir = new File(dir);
			if (!fileDir.exists()) {
				fileDir.mkdirs();
			}
			try {
				diretorio = ParametrosGerais
						.getDescricao(DIRETORIO_ARQUIVO_PARAMETROS_CONVENIADA)+"teste"+File.separator+"teste.txt";
			} catch (ExcecaoObjetoInexistente e) {
				CSIDebug
						.println("##TratadorConsiteTransmiteBalanco ::gravarDadosArquivo --> Diretorio não encontrado"
								+ e);
			}
					
		Collection coll = respConsParamConv.getVectorDadosConveniada();
		Iterator iter = coll.iterator();
		fw = new FileWriter(diretorio, true);
		String valor = "";
		
		while(iter.hasNext()){
			DadosConveniadas dadosConv = (DadosConveniadas) iter.next();
			String codigo = dadosConv.getCodigo();
			String descricao = dadosConv.getDescricao();
			boolean menu = dadosConv.isExibeMenu();
			String bin = dadosConv.getBin();
			int tDesconto = dadosConv.getTipoDesconto();
			CSIBigDecimal[] nDesconto = dadosConv.getNiveisDescontos();
			String[] nivel = new String[nDesconto.length];
			String valAux = "";
			for (int i = 0; i < nDesconto.length ; i++){
				
					if (i == 0){
                      nivel[i] = nDesconto[i].toString();					
					} else {
                      nivel[i] = ","+nDesconto[i];
                    }
					valAux = valAux + nivel[i];
			}
			int comportamento = dadosConv.getComportamento();
			valor = codigo+";"+descricao+";"+menu+";"+bin+";"+tDesconto+";"+valAux+";"+comportamento;
			String txt = valor + "\n";
			fw.write(txt);
		}
		fw.close();
		} catch (IOException e) {
			
		}	
	}
	
	public Mensagem leDadosArquivo(Mensagem msg, Servico origem) {
		CSIDebug
				.println("##TratadorMensagemConsultaParamConveniadas :: trataMensagem --> ENTROU NO TRATADOR");
		long timerTotal = System.currentTimeMillis();
		MensagemConsultaParamConveniadas msgConsParamConv = (MensagemConsultaParamConveniadas) msg;
		RespostaConsultaParamConveniadas respConsParamConv = new RespostaConsultaParamConveniadas();
		String diretorio = "";
		String fileSeparator = "\\";
		try {
			diretorio = ParametrosGerais
					.getDescricao(DIRETORIO_ARQUIVO_PARAMETROS_CONVENIADA)+File.separator+msgConsParamConv.getCodigoLoja()+File.separator;
			CSIDebug
			.println("##TratadorMensagemConsultaParamConveniadas :: trataMensagem :: DIRETORIO --> "+diretorio);
		} catch (Exception e) {
			
			CSIDebug
					.println("TratadorMensagemConsultaParamConveniadas :: trataMensagem :: Nao foi possivel encontrar diretorio");
			respConsParamConv.setStatus(RespostaConsultaParamConveniadas.ARQUIVO_INEXISTENTE);
			respConsParamConv.setMensagemResp("Err Procurando Dir.");
		}
		File fileDir = new File(diretorio);
		// Se arquivo nao existe informa tratador
		if (!fileDir.exists()) {
			CSIDebug
			.println("##TratadorMensagemConsultaParamConveniadas :: trataMensagem :: DIRETORIO NAO EXISTI --> "+diretorio);
			fileDir.mkdirs();
		}
				
		File file = new File(diretorio + NOME_ARQUIVO_PARAMETROS_CONVENIADA
				+ msgConsParamConv.getCodigoLoja()
				+ EXTENSAO_ARQUIVO_PARAMETROS_CONVENIADA);
		// Se arquivo nao existe informa tratador
		if (!file.exists()) {
			CSIDebug
			.println("##TratadorMensagemConsultaParamConveniadas :: trataMensagem --> Não existe arquivo.");
			respConsParamConv.setStatus(RespostaConsultaParamConveniadas.ARQUIVO_INEXISTENTE);
			respConsParamConv.setMensagemResp("Arquivo Inexistente.");
			return respConsParamConv;
		}
		boolean retorno = false;
		// Abre arquivo para tratamento
		FileReader fr = null;
		BufferedReader br = null;
		try {
			fr = new FileReader(file);
			br = new BufferedReader(fr);
			DadosConveniadas dadosConv = null;
			Vector vecDadosConv = new Vector();
			while (br.ready()) {
				dadosConv = new DadosConveniadas();
				
				// Le linha do arquivo
				String linha = br.readLine();

				// Formata linha lida
				String info[] = linha.split(";");
				dadosConv.setCodigo(info[0]);
				dadosConv.setDescricao(info[1]);
				//dadosConv.setExibeMenu(Boolean.getBoolean(info[2]));
				CSIDebug
				.println("##TratadorMensagemConsultaParamConveniadas :: trataMensagem --> ExibeMenu.info[2]:: "+info[2]);
				dadosConv.setExibeMenu( (new Boolean(info[2]).booleanValue()));
				CSIDebug
				.println("##TratadorMensagemConsultaParamConveniadas :: trataMensagem --> ExibeMenu.isExibeMenu():: "+dadosConv.isExibeMenu());
				dadosConv.setBin(info[3]);
				dadosConv.setTipoDesconto(Integer.parseInt(info[4]));
				String info2[] = info[5].split(",");
				CSIBigDecimal[] valor = new CSIBigDecimal[info2.length];
				for (int i = 0; i<info2.length ;i++){
					 valor[i] = new CSIBigDecimal(info2[i]);
				}
				dadosConv.setNiveisDescontos(valor);
				dadosConv.setComportamento(Integer.parseInt(info[6]));
				vecDadosConv.add(dadosConv);
			}
			respConsParamConv.setStatus(RespostaConsultaParamConveniadas.CONSULTA_OK);
			respConsParamConv.setVectorDadosConveniada(vecDadosConv);
			respConsParamConv.setDadosConveniada(dadosConv);
		} catch (IOException e) {
			e.printStackTrace();
			respConsParamConv.setStatus(RespostaConsultaParamConveniadas.ERRO_COMUNICACAO);
			respConsParamConv.setMensagemResp("Erro de Comunicação.");
		} finally {
			try {
				br.close();
				fr.close();
			} catch (IOException e) {
				CSIDebug
						.println("##TratadorMensagemConsultaParamConveniadas :: trataMensagem :: IOException e -- > "
								+ e);
				respConsParamConv.setStatus(RespostaConsultaParamConveniadas.ERRO_COMUNICACAO);
				respConsParamConv.setMensagemResp("Erro de Comunicação.");
			}

		}
		return respConsParamConv;
	}
}


public boolean deletarArquivo(String nomeArq) {
		boolean deletou = false;
		// Verifica se diretório onde estão os pedidos existe
		String dir = "";
		try {
			dir = ParametrosGerais.getDescricao(DIRETORIO_VIA_BALANCO);
		} catch (ExcecaoObjetoInexistente e) {
			CSIDebug
					.println("##TratadorConsiteTransmiteBalanco :: trataMensagem --> Diretorio não encontrado"
							+ e);
		}
		File file = new File(dir);
		//CSIDebug
				//.println("TratadorConsiteTransmiteBalanco::trataMensagem::Diretorio - "+ file);
		if (!file.exists()) {
			file.mkdirs();
		}
		if (file.exists() && file.isDirectory()) {

			String[] nomesArquivo = file.list();
			for (int i = 0; i < nomesArquivo.length; i++) {
				String nomeArquivo = nomesArquivo[i];
				//CSIDebug
					//	.println("TratadorConsiteTransmiteBalanco::trataMensagem::Nome arquivo - "
						//		+ nomeArquivo);

				if (nomeArquivo.startsWith(nomeArq)) {

					String arquivo = nomeArquivo;
					
					File fileDel = new File(dir + arquivo);
					//CSIDebug
					//.println("TratadorConsiteTransmiteBalanco::trataMensagem::Diretorio fileDel- "
					//		+ fileDel);
					deletou = fileDel.delete();
					CSIDebug
							.println("TratadorConsiteTransmiteBalanco::Deletou? - "
									+ deletou);
				}

			}

		}
		return deletou;
	}
A

No codigo que vc mandou não ei onde vc criou este objeto reader que chama o metodo readline e também o reader.close no final do programa.

while ((linha = reader.readLine())!= null){

Outro problema é que a classe StringTokenizer não está aceitando um objeto do tipo StringBuilder como parametro.

I

Declarei de uma forma e usei de outra…

FIXED

private void read(File file) throws IOException {
    final BufferedReader reader = new BufferedReader(new FileReader(file));
    final StringBuilder builder = new StringBuilder();
    String aLine;
    while ((aLine = reader.readLine()) != null) {
         builder.append(aLine);
    }

    StringTokenizer token = new StringTokenizer(builder.toString(), " ");
    while (token.hasMoreTokens()) {
        System.out.println(token.nextToken());
    }
    reader.close();
}

Testa por gentileza. T+

A

Tudo ok agora.

Muito obrigado.

Criado 13 de dezembro de 2006
Ultima resposta 15 de dez. de 2006
Respostas 7
Participantes 3