Java 使用opencsv阅读器解析包含分隔符作为列值一部分的txt文件
我有一个制表符分隔的文本文件,我想用openscsv解析它并上传到数据库。我使用CSVReader来解析文件。问题是,某些列值中有选项卡。例如,一列以一个制表符结尾,然后它有另一个制表符,用于将它与下一列分开 我在解析这个文件时遇到问题。如何避免分隔符作为值的一部分 是我试图解析的文件。每行有2列,共5行。第一行是标题。但是,当我使用以下代码解析它时,只得到3行:Java 使用opencsv阅读器解析包含分隔符作为列值一部分的txt文件,java,opencsv,Java,Opencsv,我有一个制表符分隔的文本文件,我想用openscsv解析它并上传到数据库。我使用CSVReader来解析文件。问题是,某些列值中有选项卡。例如,一列以一个制表符结尾,然后它有另一个制表符,用于将它与下一列分开 我在解析这个文件时遇到问题。如何避免分隔符作为值的一部分 是我试图解析的文件。每行有2列,共5行。第一行是标题。但是,当我使用以下代码解析它时,只得到3行: CSVReader reader = new CSVReader(new FileReader("input.txt"), '\t'
CSVReader reader = new CSVReader(new FileReader("input.txt"), '\t');
String[] nextLine;
int cnt = 0;
while ((nextLine = reader.readNext()) != null) {
if (nextLine != null) {
cnt++;
System.out.println("Length of row "+cnt+" = "+nextLine.length);
System.out.println(Arrays.toString(nextLine));
}
}
********更新********
执行正常的读取行(如以下)将打印5行:
BufferedReader br = new BufferedReader(new FileReader("input.txt"));
int lines = 0;
while(br.readLine() != null){
lines++;
}
System.out.println(lines);
在数据上加引号-这里是CSVReaderTest中修改的单元测试,它显示引号将起作用:
@Test
public void testSkippingLinesWithDifferentEscape() throws IOException
{
StringBuilder sb = new StringBuilder(CSVParser.INITIAL_READ_SIZE);
sb.append("Skip this line?t with tab").append("\n"); // should skip this
sb.append("And this line too").append("\n"); // and this
sb.append("a\t'b\tb\tb'\t'c'").append("\n"); // single quoted elements
CSVReader c = new CSVReader(new StringReader(sb.toString()), '\t', '\'', '?', 2);
String[] nextLine = c.readNext();
assertEquals(3, nextLine.length);
assertEquals("a", nextLine[0]);
assertEquals("b\tb\tb", nextLine[1]);
assertEquals("c", nextLine[2]);
}
如果这不起作用,请发布input.txt中的一些行。当我点击这个链接时,它会把我带到某个试图向我出售dropbox克隆的网站 你不能。请更改分隔符,但它看起来正在工作。它可以避免某些选项卡。它无法识别第2行和第4Thx行的末尾,将尝试您的解决方案。我上传了文件,因为我不想丢失原始格式。当你点击链接时,你可以选择下载这个文件。点击它将下载txt文件。获得该文件!我很抱歉,但我看不到下载文件按钮欣赏所有其他下载应用程序按钮:我将尝试添加一个单元测试来测试这个。好的-仔细查看了你的文件。如果字段中有分隔符,则必须在其周围加引号。在本例中,可以将单引号设置为引号字符,如我上面发布的示例所示。否则,代码如何知道什么是字段的一部分,什么是分隔符?