我有一個csv文件,當前有20行數據。 數據中包含員工信息,並採用以下格式:在Java中讀取csv文件的一行
名字,姓氏,員工ID
所以一行想這樣的:艾瑪,諾蘭,2
我知道該怎麼寫到java中的文件並將所有20行打印到控制檯,但我不知道該怎麼做是如何讓Java將一條特定的行打印到控制檯。
我也想在最後一個條目中取最後一個員工的ID號,並讓java添加1,我添加一個新員工。我認爲這需要與櫃檯完成只是不知道如何。
我有一個csv文件,當前有20行數據。 數據中包含員工信息,並採用以下格式:在Java中讀取csv文件的一行
名字,姓氏,員工ID
所以一行想這樣的:艾瑪,諾蘭,2
我知道該怎麼寫到java中的文件並將所有20行打印到控制檯,但我不知道該怎麼做是如何讓Java將一條特定的行打印到控制檯。
我也想在最後一個條目中取最後一個員工的ID號,並讓java添加1,我添加一個新員工。我認爲這需要與櫃檯完成只是不知道如何。
你可以做這樣的事情:
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)
之後訪問這些行。
所以如果我想讓它成爲自己的類,然後從另一個類調用它,我仍然會使用線。獲取(lineNumber)來訪問它? – user2603112
取決於你如何設計你的班級。你也可以在內部使用'lines.get(0)'或類似的東西的類中添加一個'getFirstLine()'方法。 – micha
請記住永遠關閉它。 –
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
}
我會把一個數字後面的字符串如此字符串[2]和一個後line.trim(20)? – user2603112
這是不可取的,因爲您的CSV字段可能用引號引起來。 –
您可以一次一個文件的一行讀課文,然後做任何你想用那行,打印,比較一下,等...
// 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;
另外,如果你想更多的控制讀取CSV文件,那麼你可以考慮CsvBeanReader,這將讓你更多的訪問文件內容..
這裏是我用來讀取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;
}
簡單的比較要匹配字符串行。如果匹配打印,否則忽略。 –
也許apache commons CSV值得一看:http://commons.apache.org/proper/commons-csv/ – Korgen