Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 导出CSV格式非常奇怪_Java_Android_Opencsv - Fatal编程技术网

Java 导出CSV格式非常奇怪

Java 导出CSV格式非常奇怪,java,android,opencsv,Java,Android,Opencsv,我在干什么?我正在将sqlite数据库导出到csv中--至少我尝试 我已经手动和手动完成了这项工作 使用这两种方法,我得到了非常奇怪的结果。它们看起来格式不太好。列(通常用“,”?)分隔)和特殊字符(据说在opencsv中处理)看起来都不是应该的。代码: CSVWriter writer = new CSVWriter(new FileWriter(file),'\n',','); String[] items = new String[11]; c.moveT

我在干什么?我正在将sqlite数据库导出到csv中--至少我尝试

我已经手动和手动完成了这项工作

使用这两种方法,我得到了非常奇怪的结果。它们看起来格式不太好。列(通常用“,”?)分隔)和特殊字符(据说在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,但找不到任何匹配的问题/

编辑:是的,我知道我使用了“旧的,不推荐的”光标,但这不是问题所在。谢谢

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

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

工作做得很好

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


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

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


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

您使用的是csv库,但您自己添加了逗号…让我更新代码..您使用的是csv库,但您自己添加了逗号..让我更新代码..听起来不错,但不起作用。我得到的结果是link2。。不管怎么说,行的制作都是正确的,但列的制作却不正确。还有关于特殊角色的问题…:/CSVWriter writer=新的CSVWriter(新的OutputStreamWriter(新的文件OutputStream(destination+“/output.csv”),“UTF-8”);做这项工作。。。不过我还是会接受你,因为你也给了我一个提示!听起来不错,但没用。我得到的结果是link2。。不管怎么说,行的制作都是正确的,但列的制作却不正确。还有关于特殊角色的问题…:/CSVWriter writer=新的CSVWriter(新的OutputStreamWriter(新的文件OutputStream(destination+“/output.csv”),“UTF-8”);做这项工作。。。不过我还是会接受你,因为你也给了我一个提示!