0

人々のデータを含むリンクされたリストがあり、それをファイルに書き込みます。リストから 1 つのエントリを削除し、新しいリストをファイルに書き込みたいと考えています。イテレータを使用しましたが、ファイルに書き込むと null エントリが表示されます。

public void deleteItem(String Iname){
    MailFiling objFile = new MailFiling();
    MailingList obj = new MailingList();
    Iterator objI = list.iterator();
    while(objI.hasNext()){
        Object o = objI.next();
        if(o.toString().contains(Iname))
            list.remove(obj);
        objFile.WriteToFile2(list);
    }//end of while
}//end of method


public void WriteToFile2(LinkedList list) {

    try {

        String writeFile = new String();
        for (int i =0; i<list.size(); i++)
        writeFile = list.get(i).toString();

        File file = new File("Mailing List 2.txt");
        FileWriter fw = new FileWriter(file, true);
        BufferedWriter bw = new BufferedWriter(fw);

        bw.write(writeFile);
        bw.newLine();
        bw.close();

    } 
     catch (IOException e) {
        System.out.println("Error opening file");
        e.printStackTrace();
    }
}
4

2 に答える 2

2

リストの remove メソッドではなく、イテレータのremoveメソッドを使用する必要があります。

Iterator objI = list.iterator();
while(objI.hasNext()) {
    if(objI.next().toString().contains(Iname)) {
        objI.remove();
    }
}
objFile.WriteToFile2(list);

また、 write メソッドはループの外で呼び出す必要があることに注意してください。

アップデート

また、印刷コードにはいくつかの問題があります。代わりにこれを試してください。

Writer writer = new BufferedWriter(new OutputStreamWriter(
      new FileOutputStream("Mailing List 2.txt"), "utf-8"));
for (int i =0; i<list.size(); i++) {
    writer.write(list.get(i).toString() + "\n");
}
writer.flush();
writer.close();
于 2013-10-27T14:57:32.180 に答える
0

iterator.remove();の代わりに 使用list.remove(obj);

于 2013-10-27T14:58:17.577 に答える