生成的 CSV 文件中不需要的双引号

2022-09-01 04:53:12

我使用以下Java代码创建了一个CSV文件:

String csv = rs.getString("UPLOAD_FOLDER_PATH")+".csv";
CSVWriter writer = new CSVWriter(new FileWriter(csv));
String [] filevalues = new String[filevaluesarray.size()];

filevalues=filevaluesarray.toArray(filevalues);

writer.writeNext(filevalues);

writer.close();

我收到 CSV 文件,但文件的内容有不需要的双引号。

例如。“ABC”,“123”,“KDNJ”

我没有从哪里得到这些双引号的添加。


答案 1

这对我有用

CSVWriter writer = 
    new CSVWriter(new FileWriter(csv), ',', CSVWriter.NO_QUOTE_CHARACTER);

请参阅 CSVWriter javadoc


答案 2

您可能应该澄清“不需要的”引号的含义。

  1. 我不希望它引用所有内容,只引用包含嵌入式逗号,引号和换行符的字段(引用所有内容是不必要的,并且使我的文件更大),或者

  2. 我不想引用任何内容,并且我知道我的CSV如果包含嵌入的逗号,引号和换行符,它将无效

如果它是第一个选项,那么opencsv不支持这个 - 它要么引用所有内容,要么什么都不引用。如果您想要一个仅在必要时引用(如果需要,也可以引用所有内容)的开源CSV库,请查看Super CSV。

如果这是第二个选项,那么请使用Sheldon的答案,但请注意,如果CSV包含嵌入式逗号,引号和换行符,则CSV将无效。

例如,如果我正在读取您的CSV文件,我怎么知道以下内容实际上只是具有2个字段的单个记录?

P Sherman, 42 Wallaby Way,
Sydney, AUSTRALIA

然而,如果引用得当,那将是显而易见的,即

P Sherman, "42 Wallaby Way,
Sydney, AUSTRALIA"

仅供参考,以下是与RFC4180(CSV的MIME类型定义)中的引号相关的规则。

5 每个字段都可以用双引号括起来,也可以不括在双引号中(但是某些程序(如 Microsoft Excel)根本不使用双引号)。如果字段未用双引号括起来,则双引号可能不会出现在字段中。例如:

   "aaa","bbb","ccc" CRLF
   zzz,yyy,xxx

6 包含换行符 (CRLF)、双引号和逗号的字段应括在双引号中。例如:

   "aaa","b CRLF
   bb","ccc" CRLF
   zzz,yyy,xxx

7 如果使用双引号将字段括起来,则出现在字段内的双引号必须通过在字段前面加上另一个双引号来转义。例如:

   "aaa","b""bb","ccc"