Erro criando e lendo um arquivo sequencial

2 respostas
R

Esse exemplo não funcionou, ele era para criar um clients.txt, ele cria o arquio mas não grava nada no arquivo, para ler ele exibe em branco já que não tem nada no arquivo.

Porque não está gravando?

O documento é criado, porém se eu tento escrever algo manualmente a exceção NoSuchElementException é chamada.

Aqui os arquivos:

AccountRecord.java

package com.deitel.jhtp6.ch14;

public class AccountRecord {
	private int account;
	private String firstName;
	private String lastName;
	private double balance;
	
	public AccountRecord(){
		this(0,"","",0.0); //chama o construtor com quatro argumentos
	}
	//inicializa um registro
	public AccountRecord(int acct, String first, String last, double bal ){
		setAccount(acct);
		setFirstName(first);
		setLastName(last);
		setBalance(bal);
	}
	
	//configura numero conta
	public void setAccount(int acct){
		account = acct;
	}
	
	public int getAccount(){
		return account;
	}
	
	public void setFirstName(String first){
		firstName = first;
	}
	
	public String getFirstName(){
		return firstName;
	}
	
	public void setLastName(String last){
		lastName = last;
	}
	
	public String getLastName(){
		return lastName;
	}
	
	public void setBalance(double bal){
		balance = bal;
	}
	
	public double getBalance(){
		return balance;
	}

}

CreateTextFile.java

package com.deitel.jhtp6.ch14;

import java.io.FileNotFoundException;
import java.lang.SecurityException;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.util.NoSuchElementException;
import java.util.Scanner;


public class CreateTextFile {
	private Formatter output;
	
	public void openFile(){
		try{
			output = new Formatter("clients.txt");
		}
		catch(SecurityException securityException){
			System.err.println("You don't have access to this file.");
			System.exit(1);
		}
		catch(FileNotFoundException filesNotFoundException){
			System.err.println("Error creating file.");
			System.exit(1);
		}
	}//fim do método openFile
	
	public void addRecords(){
		AccountRecord record = new AccountRecord();
		
		Scanner input = new Scanner(System.in);
		
		System.out.printf("%s\n%s\n%s\n%s", "To terminate input, type the end-of-file indicator",
				"when you are prompted to enter input" ,
				"On UNIX/LINUX/Mac OS X type <ctrl>d then press Enter",
				"On Windows type <ctrl>z then Press Enter.\n\n");
		
		System.out.printf("%s\n", "Enter Account Number (> 0),first name,last name e balance: ");
		
		while(input.hasNext()){
			try{
				//recupera os dados para a saída
				record.setAccount(input.nextInt());
				record.setFirstName(input.nextLine());
				record.setLastName(input.nextLine());
				record.setBalance(input.nextDouble());
				
				if(record.getAccount() > 0){
					//grava um novo arquivo
					output.format("%d %s %s %.2f\n", record.getAccount(), record.getFirstName(), record.getLastName(), record.getBalance());
				}//fim do if
				else{
					System.out.println("Account number must be greater than 0");
				}
			}//fim do try
			catch(FormatterClosedException formatterClosedException){
				System.err.println("Error writing to file.");
				return;
			}//fim do catch
			catch(NoSuchElementException elementException){
				System.err.println("\nInvalid input.Please try again.");
				input.nextLine(); //descarta entrada do usuário	
			}//fim do catch
			
			System.out.printf("%s %s\n%s", "Enter account number (>0).", "first name, last name, balance", " ?");
		}//fim do while
	}//fim do método addRecords

	//fecha o arquivo
	public void closeFile(){
		if(output != null)
			output.close();
	}
}

ReadTextFile.java

package com.deitel.jhtp6.ch14;

import java.io.File;
import java.io.FileNotFoundException;
import java.lang.IllegalStateException;
import java.util.NoSuchElementException;
import java.util.Scanner;

public class ReadTextFile {
	private Scanner input;
	
	//permite ao usuario abrir o arquivo
	public void openFile(){
		try{
			input = new Scanner(new File("clients.txt"));
		}//fim do try
		catch(FileNotFoundException fileNotFoundException){
			System.err.println("File not Found.");
			System.exit(1);
		}//fim do catch		
	}//fim do método openFile
	
	//lê os registros
	public void readRecords(){
		//objeto a ser gravado na tela
		AccountRecord record = new AccountRecord();
		
		System.out.printf("%-10s%-12s%-12s%10s\n", "Account", "First Name", "Last Name", "Balance");
		
		try{
			while(input.hasNext()){
				record.setAccount(input.nextInt());
				record.setFirstName(input.nextLine());
				record.setLastName(input.nextLine());
				record.setBalance(input.nextDouble());
				
				//exibe o conteudo do registro
				System.out.printf("%-10s%-12s%-12s%10s\n", record.getAccount(), record.getFirstName(), record.getLastName(), record.getBalance());
			}//fim do while
		}//fim do try
		catch(NoSuchElementException noSuchElementException){
			System.err.println("File improperly formed.");
			input.close();
			System.exit(1);
		}//fim do catch
		catch(IllegalStateException illegalStateException){
			System.err.println("Error reading file.");
			System.exit(1);
		}//fim do catch
	}//fim do método readRecords
	
	//fecha o arquivo e termina o aplicativo
	public void closeFile(){
		if(input != null)
			input.close(); //fecha o arquivo
	}
}

ReadTextFileTest.java

package com.deitel.jhtp6.ch14;

public class ReadTextFileTest {
	public static void main(String[] args) {
		ReadTextFile application = new ReadTextFile();
		
		application.openFile();
		application.readRecords();
		application.closeFile();
	}
}

CreateTextFileTest.java

package com.deitel.jhtp6.ch14;


public class CreateTextFileTest {
	public static void main(String[] args) {
		CreateTextFile application = new CreateTextFile();
		
		application.openFile();
		application.addRecords();
		application.closeFile();
	}

}

2 Respostas

xandevieira

vc pode tentar assim;

PrintWriter pw = new PrintWriter("c:\texto.txt");	
pw.write("seu texto");
pw.flush();
pw.close();
R

O cara só perguntou pq não está gravando… não pediu outra solução.

Criado 10 de abril de 2008
Ultima resposta 5 de set. de 2014
Respostas 2
Participantes 3