代码之家  ›  专栏  ›  技术社区  ›  Aarish Ramesh

在java中写入csv文件

  •  0
  • Aarish Ramesh  · 技术社区  · 10 年前

    我正在编写一个java程序,将数据写入一个csv文件,该文件从数据库中获取一个键的计数值,并将对应于该文件中每个键的计数写入。我使用FileWriter完成了它,其伪代码如下所示

    while (keys.hasNext()) {
        writer.append(keys.next().getCount());
        writer.append(',');
    }
    
    // where keys is the list of the keys
    

    标题也以上述方式附加。 现在我遇到了开源库,如OpenCSV和CommonsCSV,用于写入csv文件。

    所以现在我想知道是使用库更好,还是使用上面提到的写入CSV文件的方式更好。有人能告诉我在可读性和效率方面哪种方式更好吗?

    4 回复  |  直到 10 年前
        1
  •  2
  •   Viacheslav Rodionov    10 年前

    有一个工程原理- “如果它有效-不要碰它” .

    当然,使用成熟的开源库通常会在代码稳定性和灵活性方面给您带来好处。但是您将花时间学习这个库,这可能会导致代码中进行一些重构,以更好地适应它。

    在您的情况下,您可以实现对字段分隔符和编码的更好控制。

        2
  •  1
  •   slim    10 年前

    这完全取决于你。以下是OpenCSV代码的等价代码:

     CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), '\t');
     ...
     String[] row = new String[];
     int i=0;
     while(keys.hasNext()) {
         row[i++] = keys.next().getCount();
     }
     writer.writeNext(entries);
    

    这本书比你的书可读多少?这是主观的,由你决定。我可以告诉你,你的效率并不低。

    值得注意的是,您的代码将在每行末尾写“,”。图书馆不会。您的代码可以这样更改:

    boolean more = keys.hasNext();
    while (more) {
       writer.append(keys.next().getCount());
       more = keys.hasNext();
       if(more) {
          writer.append(',');
       }
    }
    

    CSV看起来很简单,而且通常很简单,直到您开始遇到更复杂的情况,例如包含逗号或转义引号的引号字段:

     A field,"another field","a field, containing a comma","A \"field\""
    

    如果你的程序遇到这样的情况,它会崩溃,你需要增强你的CSV算法来处理它。如果你使用的是一个库,你可以有一些合理的期望,它会从一开始就处理引号和引号。你认为这种情况的可能性有多大取决于你。

    编写CSV代码通常很简单,但也存在一些缺陷,而且需要维护的代码更少总是很好的。

    使用库有自己的开销——管理依赖项等等。

    你可能不需要一个图书馆来存放你现在正在做的简单的东西。如果您自己的代码变得更加复杂,或者您开始需要将bean导出到CSV或处理包含引号的CSV等功能,您可以考虑使用一个。

        3
  •  1
  •   Santosh    10 年前

    使用开源库有几个注意事项:

    赞成的意见:

    • 毫无疑问,开源库必须经过社区的审查,因此它可以作为 最有效的选择之一 .
    • 节省了大量样板代码,让您领先。
    • 图书馆里塞满了 更多功能 比你需要的更多。这有助于将来扩展应用程序。
    • 通常,开源库是 针对性能进行了优化 。这可以节省您的精力。

    欺骗:

    • 另一个依赖项 已添加到应用程序中。
    • 一个小 学习曲线 参与使用图书馆。我个人会对这一点打折扣,因为将有现成的代码可供图书馆使用。
    • 轻微地 过度杀伤 如果用例非常简单。
        4
  •  0
  •   Ameer Tamboli    10 年前

    CSV格式 文件格式不是简单地用逗号分隔列名或值。如果数据中有逗号(,)或双引号(“),则需要 逃脱 正确地

    例如,如果您有两列名称和地址。你需要写的值是name:aarish和address:“MyHome”,芝加哥,MI

    然后,如果您将其写入CSV,如:

    name,address
    aarish,"MyHome",Chicago, MI
    

    这些值将被解析为四个不同的字段。

    如果您使用这些库,它将为您提供类似CSV的输出

    "name","address"
    "aarish","""MyHome"",Chicago, MI"
    

    此文件将由其他解析器或在其他编辑器中正确打开。

    因此,如果数据中有逗号(,)或双引号(“)等字符,我建议您使用库,如果没有这样的字符,可以使用更简单的方法。