我在做什么?我将我的sqlite数据库导出到csv中 - 至少我尝试
我已手动完成此操作并使用"OpenCSV"。
使用这两种方法我得到了非常奇怪的结果。他们似乎没有很好的格式。列(通常用','?分隔)和特殊字符(据说在opencsv中处理)看起来都不应该。代码:
CSVWriter writer = new CSVWriter(new FileWriter(file),'\n',',');
String[] items = new String[11];
c.moveToFirst();
while(!c.isAfterLast()){
items[0] = c.getString(c.getColumnIndex(BaseColumns._ID));
items[1] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_QRCODE));
items[2] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_NAME));
items[3] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_AMOUNT));
items[4] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_UNIT));
items[5] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_PPU));
items[6] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_TOTAL));
items[7] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_COMMENT));
items[8] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_SHOPPING));
items[9] = c.getString(c.getColumnIndex(DepotTableMetaData.CREATED_DATE));
items[10] = c.getString(c.getColumnIndex(DepotTableMetaData.MODIFIED_DATE));
c.moveToNext();
writer.writeNext(items);
}
writer.close();
并且结果都是这样:
我也通过FileWriter和StringBuffer完成了它,但它似乎给出了完全相同的结果......如果你能帮助我,我会很高兴;)
我查看了stackoverflow但找不到任何匹配的问题; /
编辑:是的我知道我使用了“旧的,已弃用的”光标,但这不是问题。感谢。
edit2:已解决! 你必须指定一些常见的编码!
CSVWriter writer = new CSVWriter(new OutputStreamWriter(new FileOutputStream(destination+"/output.csv"),"UTF-8"));
完美地完成了工作!
答案 0 :(得分:3)
您使用OpenCSV Writer,它将CSV文件的一行作为字符串数组,并自动生成列和行之间的分隔符,但不是让OpenCSV为您执行此操作,而是通过附加所有内容来明确地执行此操作单个String中行的值。很明显,OpenCSV会获取您的唯一值,并认为它包含一个列,其中必须对逗号和换行进行编码。
您应该使用字符串数组调用writer.writeNext()
,数组中的每个字符串都是表中的单个单元格。作者将为您生成逗号和换行符。