gpt4 book ai didi

java - 使用java将数据写入顺序文本文件

转载 作者:行者123 更新时间:2023-11-30 11:17:18 25 4
gpt4 key购买 nike

有一个文本文件“clients.txt”,内容如下:

100 James Green 123.45
200 Sue Magenta 12345.67

它有两条记录。在第一条记录中,'100' 是帐号,'James' 是名字,'Green' 是姓氏,'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”。它有一行代码:'output = new Formatter( "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
}

main方法的最后一部分代码如下:

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。

最佳答案

编辑:修复错误

Ctrl+Z 不是windows下的防弹方法。你最好(因为帐号必须> 0)说:要终止输入,请输入 0 和 Enter。然后紧跟在行之后

record.setAccount( input.nextInt() ); // read account number

添加

if ( record.getAccount() == 0 ) { return; }

关于java - 使用java将数据写入顺序文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24434960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com