java - 导出 CSV 的格式真的很奇怪

标签 java android opencsv

我在做什么?我正在将我的 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();

这一切都给出了结果:

enter image description here

我也通过 FileWriter 和 StringBuffer 完成了它,但它似乎给出了完全相同的结果...如果你能帮助我,我会很高兴;)

我浏览了 stackoverflow,但找不到任何匹配的问题;/

编辑:是的,我知道我使用“旧的、已弃用的”光标,但这不是这里的问题。谢谢。

编辑2:已解决! 您必须分配一些通用编码!

CSVWriter writer = new CSVWriter(new OutputStreamWriter(new FileOutputStream(destination+"/output.csv"),"UTF-8"));

完美地完成了工作!

最佳答案

您使用 OpenCSV 编写器,它将 CSV 文件的一行作为字符串数组,并自动生成列和行之间的分隔符,但您不是让 OpenCSV 为您做这件事,而是通过附加所有内容来显式地完成此操作。单个字符串中一行的值。显然,OpenCSV 采用您的唯一值并认为它包含单个列,其中必须对逗号和换行符进行编码。

您应该调用writer.writeNext()一个字符串数组,数组中的每个字符串都是表中的一个单元格。作者将为您生成逗号和换行符。

关于java - 导出 CSV 的格式真的很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10872257/

相关文章:

java - 如何确定字符来源是否来自键盘(读取文件内容时)

java - 使用opencsv库导出数据时如何保留零开始字符串

java - 在 jersey rest api 中下载空 csv 文件

java - java.util.Base64.getMimeDecoder() 接受长度超过 76 个字符的 String 是否正常?

java - 我可以同时拥有 Spring Tool Suite 和 Eclipse 吗?

android - ANDAND 条件应为 'if true then false'

Android 小部件 Canvas - java.lang.IllegalArgumentException

java - Android - 显示空 ListView 的警报对话框

java - 应用内购买后禁用广告

java - 最长的数字序列