2013-08-03 269 views
2

我有一個csv文件,當前有20行數據。 數據中包含員工信息,並採用以下格式:在Java中讀取csv文件的一行

名字,姓氏,員工ID

所以一行想這樣的:艾瑪,諾蘭,2

我知道該怎麼寫到java中的文件並將所有20行打印到控制檯,但我不知道該怎麼做是如何讓Java將一條特定的行打印到控制檯。

我也想在最後一個條目中取最後一個員工的ID號,並讓java添加1,我添加一個新員工。我認爲這需要與櫃檯完成只是不知道如何。

+0

簡單的比較要匹配字符串行。如果匹配打印,否則忽略。 –

+0

也許apache commons CSV值得一看:http://commons.apache.org/proper/commons-csv/ – Korgen

回答

5

你可以做這樣的事情:

BufferedReader reader = new BufferedReader(new FileReader(<<your file>>)); 
List<String> lines = new ArrayList<>(); 
String line = null; 
while ((line = reader.readLine()) != null) { 
    lines.add(line); 
} 

System.out.println(lines.get(0)); 

隨着BufferedReader您可以直接讀取線。本示例逐行讀取文件並將行存儲在數組列表中。您可以使用lines.get(lineNumber)之後訪問這些行。

+0

所以如果我想讓它成爲自己的類,然後從另一個類調用它,我仍然會使用線。獲取(lineNumber)來訪問它? – user2603112

+0

取決於你如何設計你的班級。你也可以在內部使用'lines.get(0)'或類似的東西的類中添加一個'getFirstLine()'方法。 – micha

+0

請記住永遠關閉它。 –

1
BufferedReader reader =new BufferedReader(new FileReader("yourfile.csv")); 

     String line = ""; 
     while((line=reader.readLine())!=null){ 
      String [] employee =line.trim().split(","); 
      // if you want to check either it contains some name 
      //index 0 is first name, index 1 is last name, index 2 is ID 
     } 
+0

我會把一個數字後面的字符串如此字符串[2]和一個後line.trim(20)? – user2603112

+0

這是不可取的,因爲您的CSV字段可能用引號引起來。 –

0

您可以一次一個文件的一行讀課文,然後做任何你想用那行,打印,比較一下,等...

// Construct a BufferedReader object from the input file 
BufferedReader r = new BufferedReader(new FileReader("employeeData.txt")); 
int i = 1; 
try { 

    // "Prime" the while loop   
    String line = r.readLine(); 
    while (line != null) { 

     // Print a single line of input file to console 
     System.out.print("Line "+i+": "+line); 

     // Prepare for next loop iteration 
     line = r.readLine(); 
     i++; 
    } 
} finally { 
    // Free up file descriptor resources 
    r.close(); 
} 

// Remember the next available employee number in a one-up scheme 
int nextEmployeeId = i; 
0

另外,如果你想更多的控制讀取CSV文件,那麼你可以考慮CsvBeanReader,這將讓你更多的訪問文件內容..

0

這裏是我用來讀取CSV文件的算法。最有效的方法是首先將csv文件中的所有數據讀取到二維數組中。它只是使操作數據更加靈活。

通過這種方式,您可以指定文件的哪一行打印到控制檯,方法是在數組的索引中指定它並使用for。 I.e:System.out.println(employee_Data [1] [y]);記錄1. y是字段的索引變量。當然,您需要使用For循環來打印每行的每個元素。順便說一句,如果你想在一個更大的程序中使用員工數據,例如它可能會將數據存儲在數據庫中或者寫入另一個文件,我建議將整個代碼塊封裝到函數名爲Read_CSV_File(),它將返回一個2D String數組。

我的代碼

// The return type of this function is a String. 
// The CSVFile_path can be for example "employeeData.csv". 
public static String[][] Read_CSV_File(String CSVFile_path){  

String employee_Data[][]; 
int x; 
int y; 
int noofFields; 
try{ 
    String line; 
    BufferedReader in = new BufferedReader(new FileReader(CSVFile_path)); 
    // reading files in specified directory 

    // This assigns the data to the 2D array 
    // The program keeps looping through until the line read in by the console contains no data in it i.e. the end of the file. 
    while (((line = in.readLine()) != null){ 
     String[] current_Record = line.split(","); 
     if(x == 0) { 
      // Counts the number of fields in the csv file. 
      noofFields = current_Record.length(); 

     } 
     for (String str : values) { 
      employee_Data[x][y] = str; 
      System.out.print(", "+employee_Data[x][y]); 
      // The field index variable, y is incremented in every loop. 
      y = y + 1; 

     } 
     // The record index variable, x is incremented in every loop. 
     x = x + 1; 

    } 
     // This frees up the BufferedReader file descriptor resources 
     in.close(); 
    /* If an error occurs, it is caught by the catch statement and an error message 
    * is generated and displayed to the user. 
    */ 
}catch(IOException ioException) { 
    System.out.println("Exception: "+ioException); 
} 
// This prints to console the specific line of your choice 
    System.out.println(("Employee 1:); 
    for(y = 0; y < noofFields ; y++){ 
     // Prints out all fields of record 1 
     System.out.print(employee_Data[1][y]+", "); 
    } 
return employee_Data;    
}