Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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 使用Open CSV reader跳过第一行_Java_Opencsv - Fatal编程技术网

Java 使用Open CSV reader跳过第一行

Java 使用Open CSV reader跳过第一行,java,opencsv,Java,Opencsv,这是我目前使用的线路 File booleanTopicFile; // booleanTopicFile is csv file uploaded from form CSVReader csvReader = new CSVReader(new InputStreamReader(new FileInputStream(booleanTopicFile), "UTF-8")); 要跳过包含标题的csv的第一行。 我不想使用任何分隔符,除了默认的一个逗号(,),它已经在默认构造函数中可用。

这是我目前使用的线路

File booleanTopicFile;
// booleanTopicFile is csv file uploaded from form
CSVReader csvReader = new CSVReader(new InputStreamReader(new FileInputStream(booleanTopicFile), "UTF-8"));
要跳过包含标题的csv的第一行。 我不想使用任何分隔符,除了默认的一个逗号(,),它已经在默认构造函数中可用。 在参数化构造函数中,有一个选项可以跳过行数,但如何处理构造函数的第二个和第三个参数

CSVReader csvReader = new CSVReader(new InputStreamReader(Reader reader, char c, char c1, int index);
--
谢谢

此CSVReader类的构造函数在读取文件时将跳过csv的第1行

CSVReader reader = new CSVReader(new FileReader(file), ',', '\'', 1);

我发现这个问题和回答很有帮助,我想进一步说明。在最新的opencsv(撰写本文时为2.3)中,实际的代码行是:

new CSVReader( new StringReader(csvText), CSVParser.DEFAULT_SEPARATOR,
               CSVParser.DEFAULT_QUOTE_CHARACTER, 1);

注意:它使用CSVParser而不是CSVReader。

至少从3.8版开始,您可以使用
CSVReaderBuilder
并将其设置为跳过第一行

例如:

CSVReader reader = new CSVReaderBuilder(inputStreamReader)
                .withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS)
                // Skip the header
                .withSkipLines(1)
                .build();

使用最新版本的opencsv版本使用-


CSVReader CSVReader=new CSVReaderBuilder(new FileReader(“book.csv”))。使用kiplines(1.build()
您还可以使用带过滤器的

watFileCsvBeans = new CsvToBeanBuilder<ClassType>(isr)
  .withType(ClassType.class)
  .withIgnoreLeadingWhiteSpace(true)
  // CsvToBeanFilter with a custom allowLine implementation
  .withFilter(line -> !line[0].equals("skipme"))
  .build()
  .parse();
watFileCsvBeans=新的CsvToBeanBuilder(isr)
.withType(ClassType.class)
.带忽略前导空格(true)
//具有自定义allowLine实现的CsvToBeanFilter
.withFilter(第->行!第[0]行)。等于(“skipme”))
.build()
.parse();

为什么不直接读第一行,什么也不做呢?csvReader.readNext();在循环之前,是另一种解决方案,但如果可能的话,通过构造函数将是最优的。+1回答正确,但大多数CSV文件不使用双引号吗?因此,它将是
新的CSVReader(新的StringReader(csvText),CSVReader.DEFAULT_分隔符,CSVReader.DEFAULT_引号_字符,1)改为。在版本2.3中,默认分隔符和默认引号字符现在在CSVParser类中。这有一个问题。如果csv的值包含单引号,它将跳过该记录。e、 Adrian,D'sousa,AgentJust仅供参考,但该构造函数在4.0版中已被弃用。不确定如何在不使用不推荐的方法的情况下实现相同的功能。这是不推荐的。您可以使用=>
CSVReader CSVReader=new-CSVReaderBuilder(new-FileReader(csvFileName))。使用kiplines(1)。build()
非常有用。当我看到你的答案时,我正在寻找一种使用null字符作为quote参数的方法。这就是我在2016年的答案中所说的。WithKipline()工作得很好,但withFilter()不工作。