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 将尝试将 String 序列化为对象(二进制格式)。我认为您想改用 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 输出字符串(字符)。两者之间几乎没有区别,但如果您使用非标准字符或需要跨不同平台读取/写入文件,请务必指定字符编码。

于 2012-11-06T20:03:27.307 回答