我的写文本是错误的吗?

时间:2013-04-29 11:43:05

标签: java arraylist try-catch

我有一个文件调用“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),所有内容都正确打印出来。有人可以帮忙吗?

6 个答案:

答案 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