我知道这个问题已被问了一百万次,而且我已经看到了一百万个解决方案,但没有一个对我有用。我有一个哈希,我想写一个文件,但我希望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);
}
答案 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输出字符串(字符)。两者之间没有什么区别,但如果您使用非标准字符或需要跨不同平台读/写文件,请务必指定字符编码。