0

この質問は何百万回も聞かれていることを知っています。私は百万回の解決策を見てきましたが、私にとってはうまくいきませんでした. ファイルに書き込みたいハッシュセットがありますが、ハッシュセットの各要素を別々の行に入れたいです。これが私のコードです:

    Collection<String> similar4 = new HashSet<String>(file268List);
    Collection <String> different4 = new HashSet<String>();
    different4.addAll(file268List);
    different4.addAll(sqlFileList);

    similar4.retainAll(sqlFileList);
    different4.removeAll(similar4);


    Iterator hashSetIterator = different.iterator();
    while(hashSetIterator.hasNext()){
        System.out.println(hashSetIterator.next());
    }
    ObjectOutputStream writer = new ObjectOutputStream(new FileOutputStream("HashSet.txt"));
    while(hashSetIterator.hasNext()){
        Object o = hashSetIterator.next();
        writer.writeObject(o);
    }
4

2 に答える 2

5

間違っているのは、文字列をファイルに出力するのではなく、画面に出力するのとまったく同じ方法で文字列をシリアル化しようとしていることです。

PrintStream out = new PrintStream(new FileOutputStream("HashSet.txt")));
Iterator hashSetIterator = different.iterator();
while(hashSetIterator.hasNext()){
    out.println(hashSetIterator.next());
}
于 2012-11-06T20:05:07.087 に答える
2

ObjectOutputStream は、文字列をオブジェクト (バイナリ形式) としてシリアル化しようとします。代わりに PrintWriter を使用したいと思います。例:

PrintWriter writer= new PrintWriter( new OutputStreamWriter( new FileOutputStream( "HashSet.txt"), "UTF-8" )); 
while(hashSetIterator.hasNext()) {
    String o = hashSetIterator.next();
    writer.println(o);
}

この回答とMarkoからの回答に従って、PrintStreamまたはPrintWriterを使用して文字列(文字)を出力できることに注意してください。この 2 つにほとんど違いはありませんが、標準以外の文字を扱う場合や、異なるプラットフォーム間でファイルを読み書きする必要がある場合は、必ず文字エンコーディングを指定してください。

于 2012-11-06T20:03:27.307 に答える