Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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 带反斜杠的Groovy OpenCSV读取值(例如“域\用户”)_Java_Groovy_Opencsv - Fatal编程技术网

Java 带反斜杠的Groovy OpenCSV读取值(例如“域\用户”)

Java 带反斜杠的Groovy OpenCSV读取值(例如“域\用户”),java,groovy,opencsv,Java,Groovy,Opencsv,在Groovy中,我使用opencsv解析CSV文件。我的代码没有使用反斜杠处理值 我的输入文件有这个值 value1,domain\user,value2 这是我的groovy代码 def filename = 'C:\\Temp\\list.txt' CSVReader csvReader = new CSVReader(new FileReader(filename)) String[] nextRecord while ((nextRecor

在Groovy中,我使用opencsv解析CSV文件。我的代码没有使用反斜杠处理值

我的输入文件有这个值

value1,domain\user,value2
这是我的groovy代码

   def filename = 'C:\\Temp\\list.txt'
    CSVReader csvReader = new CSVReader(new FileReader(filename))
    String[] nextRecord       
    while ((nextRecord = csvReader.readNext()) != null) {
        println nextRecord
    }
    csvReader.close()
它打印第二个字段的值时不带反斜杠

[value1, domainuser, value2]
如何处理OpenCSV中的反斜杠值

谢谢 SR

============= Apache公共解析器工作正常

Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(new FileReader(filename));
for (CSVRecord record : records) {
    String f1 = record.get(0);
    String f2 = record.get(1);
    String f3 = record.get(2);
    println f1
    println f2
    println f3
}
Iterable records=CSVFormat.EXCEL.parse(新文件阅读器(文件名));
用于(CSVRecord记录:记录){
字符串f1=记录.get(0);
字符串f2=记录.get(1);
字符串f3=记录.get(2);
println f1
println f2
println f3
}

在3.9版中,除了CSVParser之外,opencsv还引入了一个解析器。CSVReader下面有一个解析器。这个新解析器称为RFC4180Parser。作为国家

RFC4180定义了一个标准,用于所有关于CSV文件格式的具体问题

CSVParser和RFC4180解析器之间的主要区别在于,CSVParser使用转义字符表示“不可打印”字符,而RFC4180规范将第一个引号和最后一个引号之间的所有字符作为福音(双引号通过双引号转义除外)

因此,请尝试使用OpenCSV3.9+和RFC4180Parser。它对我有用

def parser = new RFC4180ParserBuilder().build()
def reader = new CSVReaderBuilder(new FileReader(filename)).withCSVParser(parser).build();
println reader.readNext()
输出:

[value1, domain\user, value2]
如果由于某种原因无法使用3.9及更高版本,可以设置旧的解析器,使转义字符是其他字符而不是反斜杠。但是,在这种情况下,如果原始文件的创建者根据

。。。有时字段本身的数据中包含分隔符,因此需要引号字符。这些引号字符也可以包含在数据中,因此需要转义字符


因此,我的建议是使用3.9+版和RFC4180Parser

您是否尝试过domain\\user(我怀疑\需要转义)我无法更改原始文件,如果我从groovy读取它打印的\,只有在使用OpenCSVAwesome时才会丢失。欢迎@DmitryPerfect,它现在可以工作了。它还可以与Apache公共CSV解析器一起使用,让我来发布代码。