2017-02-28 3 views
0

Ich habe eine .csv-Datei, die Header hat, die ich gerne übersprungen werden würde. Ich erhalte einen Fehler, wenn der Header in der CSV-Datei vorhanden ist, aber wenn es entfernt wird, läuft das Programm einwandfrei. Ich möchte, dass mein Code den Header überspringt und mit dem Prozess fortfährt.Exklusive Kopfzeile von.csv

Was die CSV-Dateien wie folgt aussieht:

Marke Modell Geschwindigkeit Kraftstoff BaseMPG Skalierungsfaktor Zeit

Ford Mustang 0 20,2 20 0,02 2,3

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class Test { 

    public static void main(String[] args) throws IOException { 
    List<Vehicle> cars = new ArrayList<Vehicle>(); 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("Enter the file name:"); 
    String filename = scanner.nextLine(); 
    BufferedReader reader = new BufferedReader(new FileReader(new File(
      filename.trim()))); 
    String line = ""; 


    while ((line = reader.readLine()) != null) { 
     String[] words = line.split(","); 


      String make = words[0]; 
      String model = words[1]; 
      int currentSpeed = Integer.parseInt(words[2]); 
      double fuel = Double.parseDouble(words[3]); 
      double baseMpg = Double.parseDouble(words[4]); 
      double scaleFactor = Double.parseDouble(words[5]); 
      double timeTravelled = Double.parseDouble(words[6]); 

      Vehicle car = new Car(fuel, currentSpeed, baseMpg, scaleFactor, 
        make, model, timeTravelled); 
      System.out.println(car); 
      cars.add(car); 


    } 

    FileWriter writer=new FileWriter(new File("ProcessedCars.txt")); 

    for(Vehicle car:cars) 
    { 
     writer.write(car.toString()); 
     writer.flush(); 
     writer.write("\r\n"); 

     } 

    } 

} 

Antwort

0

Ein Weg unterwegs, es zu tun zu fangen die ausnahme:

try{ 
     int currentSpeed = Integer.parseInt(words[2]); 
     // ... 
    }catch(NumberFormatException e){ 
     // Failed to parse speed, input is likely a text, like header 
    } 

Oder, wenn Sie sicher sind, gibt es ein hea der, ruf einfach einen extra vor deiner Schleife an.

+0

Warum ich Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException erhalten: 1 \t bei Test.main (Test.java:27) – TechGeek

1

die erste Zeile in der while-Schleife überspringen

boolean skip = true; 
while ((line = reader.readLine()) != null) { 
    if(skip) { 
    skip = false; // Skip only the first line 
    continue; 
    } 
    String[] words = line.split(","); 
    // ... 
} 
+0

Ausnahme im Thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 \t bei Test.main (Test.java:27) – TechGeek

+0

Welche Zeile ist Zeile 27? – vanje

+0

Es ist wahrscheinlich, dass eine Zeile Ihrer Eingabedatei weniger Spalten als erwartet enthält. In diesem Fall hat das Wörter-Array eine Länge von weniger als 7 und dann führt "words [6]" zu einer ArrayIndexOutOfBoundsException. – vanje

Verwandte Themen