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

テキストを構築し、顧客ごとに新しいファイルを作成しているため、最後のファイルが他のすべてをオーバーライドします。

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 に答える
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

それは言う、追加-trueの場合、バイトはファイルの先頭ではなく末尾に書き込まれます

これがAPI docです。

于 2013-04-29T11:48:48.920 に答える