我有一个文件调用“CI.txt”
文件内部的信息是:
Mr Abc;ABC;abc123;Abc Road;428428;VISA;2222111144442222
Mr Efg;EFG;efg123;Efg Road;424213;MASTERCARD;4444555566667777
Mr Lmn;LMN;lmn123;Lmn Road;492482;VISA;9999000011112222
这是我的代码,它运行得很好,但问题是..
for (Customer ci : custList){
//Compares the username and userpassword
//If correct, set new card number and card type..
if (inputUser.equals(ci.getUserName()) && inputPass.equals(ci.getPassword())) {
ci.setCardNo(newCardNo);
ci.setCardType(newCardType);
}
String text = ci.getRealName() + ";" + ci.getUserName() + ";" + ci.getPassword() + ";" + ci.getContact() + ";" + ci.getcardType() + ";" + ci.getcardNo();
try {
File fileCI = new File("CI.txt");
FileWriter fileWriter = new FileWriter(fileCI);
BufferedWriter bw = new BufferedWriter(fileWriter);
bw.write(text);
bw.close();
}
catch (FileNotFoundException e) {
System.out.println("File not found");
}
catch (IOException e) {
System.out.println("Unable to write to file");
}
}
我的输出只有Lmn先生的记录。没有Abc先生的记录,我更新了新的信用卡类型和号码。为什么会这样?我在try语句中做了System.out.println(text)
,所有内容都正确打印出来。有人可以帮忙吗?
答案 0 :(得分:5)
您在for循环的每次迭代中打开和关闭文件。默认情况下打开文件会删除其中的所有内容。您必须在启动for循环之前打开文件,然后才关闭它。
答案 1 :(得分:2)
您正在构建文本并为每个客户创建新文件 ,因此最后一个文件会覆盖所有其他文件:
for (Customer ci : custList){
//...
String text = ci.getRealName() + ";" + ci.getUserName() + ";" + ci.getPassword() + ";" + ci.getContact() + ";" + ci.getcardType() + ";" + ci.getcardNo();
try {
File fileCI = new File("CI.txt");
FileWriter fileWriter = new FileWriter(fileCI);
//...
}
您需要在循环外创建文件,然后构建内容并用数据填充文件,最后关闭文件。
答案 2 :(得分:2)
代码中的问题是每个for循环迭代都会重新创建文件并覆盖其内容
答案 3 :(得分:1)
问题是您正在写入for循环内的文件。这意味着对于每个循环,文件将被新数据覆盖。最后,只显示最后的数据。您需要在文件编写代码中移动for循环代码,如下所示:
try
{
File fileCI = new File ( "CI.txt" );
FileWriter fileWriter = new FileWriter ( fileCI );
BufferedWriter bw = new BufferedWriter ( fileWriter );
for ( Customer ci : custList )
{
if ( inputUser.equals ( ci.getUserName () )
&& inputPass.equals ( ci.getPassword () ) )
{
ci.setCardNo ( newCardNo );
ci.setCardType ( newCardType );
}
String text = ci.getRealName () + ";" + ci.getUserName () + ";"
+ ci.getPassword () + ";" + ci.getContact () + ";"
+ ci.getcardType () + ";" + ci.getcardNo ();
bw.write ( text );
}
bw.close ();
fileWriter.close();
}
catch ( FileNotFoundException e )
{
System.out.println ( "File not found" );
}
catch ( IOException e )
{
System.out.println ( "Unable to write to file" );
}
答案 4 :(得分:0)
您正在循环运行每个客户。
for (Customer ci : custList){
每次运行循环时,都会创建一个名为CI.txt
的新文件 File fileCI = new File("CI.txt");
由于您为每位客户从头开始创建文件,因此只保留最后一位客户。打开文件以进行追加。
答案 5 :(得分:0)
使用:
public FileWriter(File file,boolean append)
throws IOException
它说, 追加 - 如果为true,则字节将写入文件末尾而不是开头
这是API doc。