我正在编写一个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文件的方式。有人可以告诉我哪种方式在可读性和效率方面更好?
答案 0 :(得分:2)
有一个工程原则 - "如果有效 - 请勿触摸它" 。
当然,使用成熟的开源库通常可以在代码稳定性和灵活性方面获益。但是你会花时间学习这个库,这可能会导致你的代码中的一些重构很好地适应它。
在您的情况下,您可以实现对字段分隔符和编码的更大控制。
答案 1 :(得分:2)
这完全取决于你。这是您的代码的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等功能,您可以考虑使用一个。
答案 2 :(得分:1)
使用开源库几乎没有考虑因素:
<强>优点:强>
<强>缺点:强>
答案 3 :(得分:0)
CSV 文件格式不仅仅是用逗号分隔列名或值。如果您的数据中有逗号(,)或双引号(“),则需要转义。
例如,如果您有两列名称和地址。你需要写的名字是:aarish和address:“MyHome”,Chicago,MI
然后,如果你用CSV写这个:
name,address
aarish,"MyHome",Chicago, MI
这些值将被解析为四个不同的字段。
如果您使用这些库,它会以CSV格式输出
"name","address"
"aarish","""MyHome"",Chicago, MI"
此文件将是其他解析器或在其他编辑器中正确打开。
因此,如果您的数据中包含逗号(,)或双引号(“)等字符,我建议您使用库,如果您没有任何此类字符,则可以采用更简单的方法。< / p>