Skip first line when reading CSV file in Java

Hi guys, I am writing a parser code to read a CSV file and parse it to XML. This is the code that I have, and it works fine, except that I would like to skip the first line in the file. So I decided to configure HashMap, but it works:

for (int i = 0; i < listOfFiles.length; i++) { File file = listOfFiles[i]; if (file.isFile() && file.getName().endsWith(".csv")){ System.out.println("File Found: " + file.getName());//Prints the name of the csv file found String filePath = sourcepath + "\\" + file.getName(); BufferedReader br = new BufferedReader(new FileReader(file)); String line; int n = 1; Map<Integer,String> lineMap = new HashMap<Integer,String>(); int k=2; while ((line = br.readLine()) != null) { System.out.println(n + " iteration(s) of 1st While Loop"); lineMap.put(k, line); fw.write(" <ASSET action=\"AddChange\">\n"); fw.write(" <HOSTNAME>\n"); hostName=line.substring(0, line.indexOf(",")); fw.append(hostName); fw.write("</HOSTNAME>\n"); fw.write(" <HOSTID>\n"); hostID=line.substring(line.indexOf(",")+1, nthOccurrence(line, ',', 1)); fw.append(hostID); fw.write("</HOSTID>\n"); fw.write(" <MACMODEL>\n"); machineModel=line.substring(nthOccurrence(line, ',', 1)+1, nthOccurrence(line, ',', 2)); fw.append(machineModel); fw.write("</MACMODEL>\n"); fw.write(" <PROMODEL>\n"); processorModel=line.substring(nthOccurrence(line, ',', 2)+1, nthOccurrence(line, ',', 3)); fw.append(processorModel); fw.write("</PROMODEL>\n"); fw.write(" <CORE>\n"); core=line.substring(nthOccurrence(line, ',', 3)+1, nthOccurrence(line, ',', 4)); fw.append(core); fw.write("</CORE>\n"); fw.write(" <PROC>\n"); proc=line.substring(nthOccurrence(line, ',', 4)+1, nthOccurrence(line, ',', 5)); fw.append(proc); fw.write("</PROC>\n"); fw.write(" <TIER>\n"); tier=line.substring(nthOccurrence(line, ',', 5)+1, nthOccurrence(line, ',', 6)); fw.append(tier); fw.write("</TIER>\n"); fw.write(" <PRODNAME>\n"); productName=line.substring(nthOccurrence(line, ',', 6)+1, nthOccurrence(line, ',', 7)); fw.append(productName); fw.write("</PRODNAME>\n"); fw.write(" <VERSION>\n"); version=line.substring(nthOccurrence(line, ',', 7)+1, nthOccurrence(line, ',', 8)); fw.append(version); fw.write("</VERSION>\n"); fw.write(" <SCRIPTDATA>\n"); scriptData=line.substring(nthOccurrence(line, ',', 8)+1, line.length()); fw.append(scriptData); fw.write("</SCRIPTDATA>\n"); fw.write(" </ASSET>\n"); k++; }n++; 

This is a snippet of the main body of the code. Any ideas or solutions ???

+6
source share
8 answers

You might consider placing headerLine = br.readLine() before the while loop so that you consume the header separately from the rest of the file. You can also use opencsv to parse csv, as this can simplify your logic.

+20
source

Create an interation variable and initialize with 0 . Check this out as the first thing in a while .

 String line; int iteration = 0; while ((line = br.readLine()) != null) { if(iteration == 0) { iteration++; continue; } ... ... } 
+5
source

I feel compelled to add an answer in java 8.

 List<String> xmlLines = new BufferedReader(new FileReader(csvFile)) .lines() .skip(1) //Skips the first n lines, in this case 1 .map(s -> { //csv line parsing and xml logic here //... return xmlString; }) .collect(Collectors.toList()); 
+3
source

why don't you just use a for loop

 for(int i=1; (line = br.readLine()) != null; i++) { //Your code } 
+2
source

I'm pretty confused by your code, you have lineMap, and you also have fw (whatever that is). Which one are you using? You say you want to skip the first line, but you donโ€™t

 if (firstLine == true) { firstLine = false; continue; } 

I would also suggest using a library like CSVReader, which I think even has the ignoreFirstLine property

http://opencsv.sourceforge.net/apidocs/au/com/bytecode/opencsv/CSVReader.html

+1
source

Use the buffer buffer twice, for example:

 while ((line = br.readLine()) != null) { while ((line = br.readLine()) != null) { //your code } } 
0
source
 boolean isRecord = false; for (CSVRecord record : records) { if(isRecord){ //process records here. }else{ isRecord = true; } } 

Instead of adding a flag, adding a counter will not affect performance.

0
source

To skip the first row (which usually contains the column heading), it takes a variable and increments that variable during the loop in the first place and continues;

 int lineNumber = 0; and then in while loop while ((line = br.readLine()) != null) { if(lineNumber == 0) { lineNumber++; continue; } lineNumber++; //do waterver u have to do with the tokens in this line(second line) } 
-1
source

Source: https://habr.com/ru/post/951993/


All Articles