Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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_Kotlin_Opencsv - Fatal编程技术网

Java 生成CSV文件,其中一些值被引用,其他值未被引用

Java 生成CSV文件,其中一些值被引用,其他值未被引用,java,kotlin,opencsv,Java,Kotlin,Opencsv,我刚开始写CSV文件,有一个场景我找不到答案。我需要生成一个没有标题的CSV文件,其中数字值不带引号,字符串带引号。例如-71,72,“初始”,“2020-10-01” 我使用了CSVWriter构造函数: CSVWriter(FileWriter(ClassLoader.getSystemResource("mytable.csv").path), ',', '\'', '\"', "\n") 我试图用双引号填充字符串值,但这不起作用 val

我刚开始写CSV文件,有一个场景我找不到答案。我需要生成一个没有标题的CSV文件,其中数字值不带引号,字符串带引号。例如-71,72,“初始”,“2020-10-01”

我使用了CSVWriter构造函数:

CSVWriter(FileWriter(ClassLoader.getSystemResource("mytable.csv").path), ',', '\'', '\"', "\n")
我试图用双引号填充字符串值,但这不起作用

val linesForCSVUploadToTable = arrayOf(
                    someId.toString(),
                    someOtherId.toString(),
                    "\"initial\"",
                    "\"2020-10-15\"",
                    "\"2020-10-15\"",
                    "\"csv\"",//created_by
                    "\"2020-10-15\"",
                    "\"csv\"",
                    "\"csv\"",
                    "\"2020-10-15\""
            )
输出为:

'100001','100001','""initial""','""2020-10-15""','""2020-10-15""','""csv""','""2020-10-15""','""csv""','""csv""','""2020-10-15""'
我必须.toString ID,因为writeAll()和writeNext()函数似乎采用字符串数组,并且不接受任何类型的数组

我想避免编写自己的自定义CSV编写器。如果有必要的话,那就这样吧

我正在使用OpenCSV5.2并在Kotlin中编写这篇文章。Java也可以工作

任何帮助都将不胜感激!谢谢

您可能应该使用,它提供了
非数字
报价策略,从而在CSV文件中引用任何非数字值示例:

try(Writer w=…){
CSVFormat outFormat=CSVFormat.newFormat(',')
.withRecordSeparator(“\n”)
.withQuote(“\”)
.withQuoteMode(QuoteMode.MINIMAL);
CSVPrinter打印机=新的CSVPrinter(w,输出格式);
打印机。打印记录(…);
}
您可能应该使用,它提供了
非数字的
引用策略,从而在CSV文件中引用任何非数字值。示例:

try(Writer w=…){
CSVFormat outFormat=CSVFormat.newFormat(',')
.withRecordSeparator(“\n”)
.withQuote(“\”)
.withQuoteMode(QuoteMode.MINIMAL);
CSVPrinter打印机=新的CSVPrinter(w,输出格式);
打印机。打印记录(…);
}

这是一个奇怪的要求。。。定义何时以及如何引用,那么您为什么会偏离这一点?除非您处理的是不一致的CSV读取器?您的意思是,您存储的某些值应该包括引号,而不管它们是如何存储的? (这是完全可以理解的——但是CSV的作者和读者应该为您处理好这一切。) 或者,您的意思是生成的CSV文件应该引用一些值,而其他值不应该引用? (我不知道这样做有什么好的理由。 正如罗伯特所说,这是非常不标准的,很可能表明某个地方存在误解。 不管你是否引用字段,最终结果通常都是一样的。)@Robert我猜这是一个不符合CSV的阅读器?这个CSV将批量上传约5000万行到我的AWS Aurora Postgres DB中,CSV行必须与您的表结构相匹配,我的是-BigInt、BigInt、String等。我想AWS中的这个CSV阅读器不会将字符串解析为int?@gidds我需要不引用数字和引用字符串这是一个奇怪的要求。。。定义何时以及如何引用,那么您为什么会偏离这一点?除非您处理的是不一致的CSV读取器?您的意思是,您存储的某些值应该包括引号,而不管它们是如何存储的? (这是完全可以理解的——但是CSV的作者和读者应该为您处理好这一切。) 或者,您的意思是生成的CSV文件应该引用一些值,而其他值不应该引用? (我不知道这样做有什么好的理由。 正如罗伯特所说,这是非常不标准的,很可能表明某个地方存在误解。 不管你是否引用字段,最终结果通常都是一样的。)@Robert我猜这是一个不符合CSV的阅读器?这个CSV将批量上传约5000万行到我的AWS Aurora Postgres DB中,CSV行必须与您的表结构相匹配,我的是-BigInt,BigInt,String,等等。我猜AWS中的CSV阅读器不会将字符串解析为int?@gidds我需要不引用数字和引用字符串这正是我要找的!谢谢你!这正是我要找的!谢谢你!