2012-11-27 15 views
11

Oto wiersz używam obecniePrzejdź pierwszej linii przy użyciu Open czytnika CSV

File booleanTopicFile; 
// booleanTopicFile is csv file uploaded from form 
CSVReader csvReader = new CSVReader(new InputStreamReader(new FileInputStream(booleanTopicFile), "UTF-8")); 

Chcesz pominąć pierwszy wiersz pliku CSV, który zawiera nagłówki. Nie chcę używać żadnego separatora, oprócz domyślnego przecinka (,), który jest już dostępny w domyślnym konstruktorze. W konstruktorze sparametryzowanym dostępna jest opcja pominięcia nie. linii, ale jak radzić sobie z 2. i 3. paramem konstruktora.

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

- Dzięki

+3

Dlaczego nie można po prostu przeczytać pierwszą linię i nic z tym wspólnego? – svz

+1

csvReader.readNext(); przed pętlą jest rozwiązaniem alternatywnym, ale byłoby optymalne, gdyby było możliwe za pośrednictwem konstruktora. –

Odpowiedz

26

Ten konstruktor klasy CsvReader pominie 1st linię csv podczas odczytu pliku.

+5

+1 Prawidłowa odpowiedź, ale czy większość plików CSV nie używa podwójnego cytowania? Tak więc byłby to "nowy CSVReader (nowy StringReader (csvText), CSVReader.DEFAULT_SEPARATOR, CSVReader.DEFAULT_QUOTE_CHARACTER, 1);' zamiast. –

+2

W wersji 2.3 * DEFAULT_SEPARATOR * i * DEFAULT_QUOTE_CHARACTER * są teraz w klasie * CSVParser *. – nyxz

12

Znalazłem to pytanie i odpowiedź była pomocna. Chciałbym je rozwinąć na Christophe Roussy's comment. W najnowszym opencsv (2.3 jak to pisze) Rzeczywista linia kodu:

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

Uwaga używa CSVParser zamiast CsvReader.

+0

Bardzo pomocny. Szukałem sposobu na użycie parametru null dla parametru quote, gdy zobaczyłem twoją odpowiedź. – Stephane

5

Przynajmniej od wersji 3.8 można użyć CSVReaderBuilder i ustawić, aby pominąć pierwszą linię.

Przykład:

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