存在具有以下內容的文本文件「clients.txt」:將數據寫入順序文本文件與Java
100 James Green 123.45
200 Sue Magenta 12345.67
它有兩個記錄。在第一個記錄中,'100'是賬號,'James'是名字,'Green'是LastName,'123.45'是餘額。
下面的代碼是包含上述字段以及套路「AccountRecord.java」文件獲取方法:
public class AccountRecord {
private int account;
private String firstName;
private String lastName;
private double balance;
// no-argument constructor calls other constructor with default values
public AccountRecord() {
this(0, "", "", 0.0); // call four-argument constructor
} // end no-argument AccountRecord constructor
// initialize a record
public AccountRecord(int acct, String first, String last, double bal) {
setAccount(acct);
setFirstName(first);
setLastName(last);
setBalance(bal);
} // end four-argument AccountRecord constructor
// set account number
public void setAccount(int acct) {
account = acct;
} // end method setAccount
// get account number
public int getAccount()
return account;
} // end method getAccount
// set first name
public void setFirstName(String first) {
firstName = first;
} // end method setFirstName
// get first name
public String getFirstName() {
return firstName;
} // end method getFirstName
// set last name
public void setLastName(String last) {
lastName = last;
} // end method setLastName
// get last name
public String getLastName() {
return lastName;
} // end method getLastName
//set balance
public void setBalance(double bal) {
balance = bal;
} // end method setBalance
// get balance
public double getBalance() {
return balance;
} // end method getBalance
} // end clas
下面的代碼是「CreateTextFile.java」。它有一個代碼行:「輸出=新格式化器(‘clients.txt’);」,實例化從「clients.text」格式格式化對象:
import java.io.FileNotFoundException;
import java.lang.SecurityException;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.util.NoSuchElementException;
import java.util.Scanner;
import com.deitel.ch17.AccountRecord;
public class CreateTextFile
{
private Formatter output; // object used to output text to file
// enable user to open file
public void openFile()
{
try
{
output = new Formatter("clients.txt"); // open the file
} // end try
catch (SecurityException securityException)
{
System.err.println(
"You do not have write access to this file.");
System.exit(1); // terminate the program
} // end catch
catch (FileNotFoundException fileNotFoundException)
{
System.err.println("Error opening or creating file.");
System.exit(1); // terminate the program
} // end catch
} // end method openFile
// add records to file
public void addRecords()
{
// object to be written to file
AccountRecord record = new AccountRecord();
Scanner input = new Scanner(System.in);
System.out.printf("%s\n%s\n%s\n%s\n\n",
"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");
System.out.printf("%s\n%s",
"Enter account number (> 0), first name, last name and balance.",
"? ");
while (input.hasNext()) // loop until end-of-file indicator
{
try // output values to file
{
// retrieve data to be output
record.setAccount(input.nextInt()); // read account number
record.setFirstName(input.next()); // read first name
record.setLastName(input.next()); // read last name
record.setBalance(input.nextDouble()); // read balance
if (record.getAccount() > 0)
{
// write new record
output.format("%d %s %s %.2f\n", record.getAccount(),
record.getFirstName(), record.getLastName(),
record.getBalance());
} // end if
else
{
System.out.println(
"Account number must be greater than 0.");
} // end else
} // end try
catch (FormatterClosedException formatterClosedException)
{
System.err.println("Error writing to file.");
return;
} // end catch
catch (NoSuchElementException elementException)
{
System.err.println("Invalid input. Please try again.");
input.nextLine(); // discard input so user can try again
} // end catch
System.out.printf("%s %s\n%s", "Enter account number (>0),",
"first name, last name and balance.", "? ");
} // end while
} // end method addRecords
// close file
public void closeFile()
{
if (output != null)
output.close();
} // end method closeFile
}
代碼的主方法的最後部分是:
public class CreateTextFileTest
{
public static void main(String[] args)
{
CreateTextFile application = new CreateTextFile();
application.openFile();
application.addRecords();
application.closeFile();
} // end main
}// end class CreateTextFileTest
當我運行這個類,並嘗試進入一個新的記錄,我得到的消息是:
run:
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
Enter account number (> 0), first name, last name and balance.
? 300 Har Par 112.235
Enter account number (>0), first name, last name and balance.
? ^z
Invalid input. Please try again.
Enter account number (>0), first name, last name and balance.
?
作爲新的節目我感到困惑的是,爲什麼這個輸入無效。我需要幫助來糾正這些代碼或糾正我的輸入。整個代碼已經提交,以便可以精確地判斷問題。我正在使用Netbean IDE 8.0和jdk-8u5-windows-64。
你希望人們瀏覽大量的代碼,並找出問題的所在。大部分代碼與問題無關。只包括重現問題所需的代碼,更多的人會閱讀你的問題。 –
@DonBranson我假設,因爲輸入提示說使用Ctrl + Z來終止輸入。雖然根據http://superuser.com/questions/291224/equivalent-to-d-in-bash-for-cmd-exe實際上在CMD中輸入Ctrl + Z將不會生成EOF。 – SamYonnou
你說得對。看到評論後,並刪除了我的評論。 –