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();
}
}