Saltare la prima linea durante la lettura di file CSV in Java

Ciao ragazzi, sto scrivendo un analizzatore di codice per leggere un .file csv e analizzare XML. Questo è il codice che ho e funziona bene, tranne vorrei saltare la prima riga del file. Così ho deciso di impostare una HashMap, ma non sembra funzionare:

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++;

Questo è un frammento della parte principale del codice. Tutte le Idee o Soluzioni???

Non il voto, ma a chiarire la vostra "it does seem to work", per favore.
scusate errore di battitura….non mi pare di lavoro
Sappiamo che, in futuro, raccontare di più su come è non funziona. Le informazioni più utili da dare, il più facile sarà per rispondere alle vostre domande.

OriginaleL’autore user2643355 | 2013-08-19

8 Replies
  1. 22

    Si potrebbe prendere in considerazione l’immissione headerLine = br.readLine() prima del tuo ciclo while così si consuma l’intestazione separatamente dal resto del file. Inoltre, si potrebbe considerare l’utilizzo di opencsv per il csv l’analisi di come si può semplificare la tua logica.

    OriginaleL’autore David Maust

  2. 5

    Creare una variabile interation e inizializzare con 0. Controllare come prima cosa in while loop.

    String line;
    int iteration = 0;
    while ((line = br.readLine()) != null) {
        if(iteration == 0) {
            iteration++;  
            continue;
        }
        ...
        ...
    }
    Se quello che volevo saltare le prime due righe? una linea con il testo e la successiva riga è una riga vuota/spazio?
    Fare if(iteration == 0 || iteration == 1) invece, o meglio ancora il if(iteration < 2). Capito?

    OriginaleL’autore Azodious

  3. 4

    Mi sento in dovere di aggiungere un java 8 aromatizzato risposta.

    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());

    OriginaleL’autore n4rzul

  4. 2

    perché non basta usare il ciclo for

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

    OriginaleL’autore achakravarty

  5. 0

    Utilizzare il buffer del lettore due volte, come questa:

    while ((line = br.readLine()) != null) {
      while ((line = br.readLine()) != null) {
        //your code                     
      }
    }

    OriginaleL’autore user3418885

  6. 0
    boolean isRecord = false;
    for (CSVRecord record : records) {
        if(isRecord){
            //process records here.
        }else{
            isRecord = true;
        }
    }

    Invece di aggiungere contatore aggiunta di bandiera non ha colpito le prestazioni.

    OriginaleL’autore rahulpatil

  7. -1

    Per saltare la prima riga(che normalmente contiene l’intestazione delle colonne) prendere una variabile e aumento di questa variabile nel ciclo while primo luogo, e continua;

    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)
    
                }
    La stessa risposta è stato pubblicato più di un anno fa.

    OriginaleL’autore user3585491

Lascia un commento