Java 带反斜杠的Groovy OpenCSV读取值(例如“域\用户”)
在Groovy中,我使用opencsv解析CSV文件。我的代码没有使用反斜杠处理值 我的输入文件有这个值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
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解析器一起使用,让我来发布代码。