【问题标题】:Saving a Hashset to a file in Java将 Hashset 保存到 Java 中的文件
【发布时间】:2012-10-26 20:14:17
【问题描述】:

我知道这个问题已经被问过一百万次,我已经看到了一百万个解决方案,但没有一个对我有用。我有一个要写入文件的哈希集,但我希望哈希集中的每个元素都位于单独的行中。 这是我的代码:

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

【问题讨论】:

  • 您看到了哪些解决方案?为什么他们不为你工作?
  • 如何将哈希集写入文件,每个元素位于不同的行中
  • 您发布的相关代码有什么问题?
  • 上面的一个是我见过的解决方案之一,它写的是一堆特殊字符到文件中。
  • 呃。当您将对象序列化为文件时,是什么使新行相关?你知道序列化和简单的Object.toString()的区别吗?

标签: java hashset


【解决方案1】:

你弄错的地方是你试图序列化字符串而不是仅仅将它们打印到文件中,与将它们打印到屏幕上的方式完全相同:

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

【讨论】:

    【解决方案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 输出字符串(字符)。两者差别不大,但如果您使用非标准字符或需要跨不同平台读取/写入文件,请务必指定字符编码。

    【讨论】:

    • 请注意,就字符编码问题而言,您提出的解决方案与使用PrintStream 的解决方案存在完全相同的问题。
    • 同意。我已经修改了这个答案以显示如何明确设置 UTF-8。我还刚刚了解到 PrintStream 允许从最近的 JDK 中的构造函数设置字符编码。因此,除了自动刷新行为之外,两者之间几乎没有什么区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多