使用Java将哈希集保存到文件中

时间:2012-11-06 19:59:16

标签: java hashset

我知道这个问题已被问了一百万次,而且我已经看到了一百万个解决方案,但没有一个对我有用。我有一个哈希,我想写一个文件,但我希望Hashset中的每个元素在一个单独的行。 这是我的代码:

    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);
    }

2 个答案:

答案 0 :(得分:5)

如果你弄错了,那就是你试图序列化字符串而不是只是将它们打印到文件中,就像你将它们打印到屏幕上一样:

PrintStream out = new PrintStream(new FileOutputStream("HashSet.txt")));
Iterator hashSetIterator = different.iterator();
while(hashSetIterator.hasNext()){
    out.println(hashSetIterator.next());
}

答案 1 :(得分: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输出字符串(字符)。两者之间没有什么区别,但如果您使用非标准字符或需要跨不同平台读/写文件,请务必指定字符编码。