Skip first line while reading CSV file in Java

user2643355 picture user2643355 · Aug 19, 2013 · Viewed 64.1k times · Source

I am writing a parser code to read a .csv file and parse it to XML. This is the code I have and it works, except I would like it to skip the first line in the file. So I decided to set up a HashMap but it doesn't seem to work:

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 part of the code. Any Ideas or Solutions???

Answer

David Maust picture David Maust · Aug 19, 2013

You might consider placing headerLine = br.readLine() before your while loop so you consume the header separately from the rest of the file. Also you might consider using opencsv for csv parsing as it may simplify your logic.