1

我有一个名为“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 先生的记录。为什么会这样?我System.out.println(text)在 try 语句中做了,一切都被正确打印出来了。任何人都可以帮忙吗?

4

6 回答 6

5

您在 for 循环的每次迭代中打开和关闭文件。默认情况下打开文件会删除其中的所有内容。您必须在开始 for 循环之前打开文件,然后才能关闭它。

于 2013-04-29T11:47:05.313 回答
2

您正在构建 Text 并为每个 customer创建新文件,因此最后一个会覆盖所有其他文件:

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);
     //...

}

您需要在循环外创建文件,然后构建内容并用数据填充文件,最后关闭文件。

于 2013-04-29T11:46:57.377 回答
2

您的代码中的问题是每次 for 循环迭代都会重新创建文件并覆盖其内容

于 2013-04-29T11:47:28.410 回答
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" );
        }
于 2013-04-29T11:49:20.040 回答
0

您正在循环运行每个客户。

for (Customer ci : custList){

每次运行循环时,都会创建一个名为 CI.txt 的新文件

 File fileCI = new File("CI.txt");

由于您为每个客户从头开始创建文件,因此只会保留最后一个客户。改为打开文件进行追加。

于 2013-04-29T11:48:17.917 回答
0

采用 :

public FileWriter(File file,boolean append)
       throws IOException

它说,追加- 如果为真,那么字节将被写入文件的末尾而不是开头

这是API 文档

于 2013-04-29T11:48:48.920 回答