2016-04-19 17 views
-1

Ich habe eine Klasse namens EmpQuery, die ich versuche, ein Array von Objekten für meine Employee-Klasse zu erstellen, um Daten zu halten, die aus einer Employeedatabase.csv-Datei stammt. Die Datenbank sieht wie folgt aus. Ich brauche einen Stream-Processing-Algorithmus.eine CSV-Datei in ein Array in Java lesen

Loop till EOF{ 
read in 1 record 
Deal with that record completly 
} 

EX.

Employee ID,Full Name,Department,Start Date,Earnings 
EMP001,Adele M. Fulton,Engineering,10/28/2008,"$104,000.00" 
EMP002,Ali T. Herman,Engineering,2/27/2012,"$337,522.00" 
EMP003,Alika C. Crawford,Engineering,6/2/2009,"$144,000.00" 

Bisher habe ich nur so viel aufgebaut public class EmployeeDB {

private static String[] empID = new String[300]; 
    private static String[] empName = new String[300]; 
    private static String[] department = new String[300]; 
    private static String[] startDate = new String[300]; 
    private static String [] earnings = new String[300]; 
    private static String [] empDataBase = new String[300]; 
    /** 
    * @param args the command line arguments 
    * @throws java.io.FileNotFoundException 
    */ 
    public static void main(String[] args) throws FileNotFoundException { 
     fillDataArray(); 
    } 

    public class employee{ 
     String empID; 
     String empName; 
     String department; 
     String startDate; 
     int earnings; 

    public employee(String ID,String Name,String dept,String sDate,int earn){ 

      empName = Name; 
      empID = ID; 
      department = dept; 
      startDate = sDate; 
      earnings = earn; 
    }  
    public employee(String ID, String Name) { 

      empName = Name; 
      empID = ID; 
      department = ""; 
      startDate = ""; 
      earnings = 0; 

    } 
    public employee(){ 

      empName = ""; 
      empID = ""; 
      department = ""; 
      startDate = ""; 
      earnings = 0; 

    } 

    } 
    private static String[] fillDataArray() throws FileNotFoundException { 
     File DatabaseFile = new File("EmpDB_lab7.csv"); 
     Scanner inputFile = new Scanner(DatabaseFile); 
     String InputLine; 
     String [] empDBTemp = null; 
     int i=0; 

     while (inputFile.hasNextLine()) { 
      InputLine = inputFile.nextLine(); 
      empDBTemp = InputLine.split("-"); 
      empID[i] = empDBTemp[1]; 
      empName[i] = empDBTemp[2]; 
      department[i] = empDBTemp[3]; 
      startDate[i] = empDBTemp[4]; 
      earnings[i] = empDBTemp[5]; 
     } 



    return empDBTemp; 

    } 
} 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
    at employeedb.EmployeeDB.fillDataArray(EmployeeDB.java:76) 
    at employeedb.EmployeeDB.main(EmployeeDB.java:28) 
Java Result: 1 
+0

Ihre Anforderungen sind hier aber nicht Ihre Mühe. Zeigen Sie, was Sie bisher getan haben, um dieses Problem zu lösen. – Kon

+0

Ich habe aktualisiert, wo ich bisher mit dem Fehler – Pwoods

Antwort

1

CSV-Parsing ist schwieriger als es scheint, so dass Sie eine bereits vorhandene Bibliothek verwenden sollten, wie Super CSV

Ihre CSV-Spaltennamen sollten mit Ihren Bean-Feldnamen übereinstimmen (oder überspringen Sie den Header insgesamt), und Einnahmen könnten ein String sein, sonst sollten Sie einen CellProcessor verwenden, um es zu analysieren.

Das Lesen von Zeug in einem Array und Stream-Verarbeitung sind widersprüchlich.

ICsvBeanReader csvReader = new CsvBeanReader(new FileReader("employeedatabase.csv"), CsvPreference.STANDARD_PREFERENCE); 

String[] header = csvReader.getHeader(false); 

EmployeeDB employeeDB; 

while((employeeDB = csvReader.read(EmployeeDB.class, header)) != null) { 
    System.out.println(employeeDB.getEmpName()); 
} 

csvReader.close(); 

Und

public class EmployeeDB { 

    private String empID; 
    private String empName; 
    private String department; 
    private String startDate; 
    private String earnings; 

    ...getters/setters... 
} 

änderte ich den Header:

EmpID,EmpName,Department,StartDate,Earnings 
+0

hinzugefügt wurde Eine andere Wahl der CSV-Analyse/Generierung Bibliothek ist [Apache Commons CSV] (https://commons.apache.org/proper/commons-csv/). Hat sehr gut für mich gearbeitet. Handles [Standard-CSV] (http://tools.ietf.org/html/rfc4180), nicht standardmäßige CSV- und tabulatorgetrennte Formate. –