我的主程式
import java.io.IOException;
import java.util.List;
/**
* Ein Programm in Java welches CSV Dateien einlesen kann.
* Wichtige Daten in einer config.properties Datei liegen.
*
* @author F821621
* @version 1.0
*
*/
public class Main {
/**
* Hauptprogramm
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
PropertyManager config = new PropertyManager();
CSV_Reader myReader = new CSV_Reader();
//myReader.scannerRead(config.getProperty("path"));
List<Beruf> berufe = myReader.fileRead(config.getProperty("path"));
for(Beruf b : berufe) {
System.out.println(b);
}
}
}
我的 CSV_Reader.java
package de.basler;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author F821621
*
*/
public class CSV_Reader {
/**
* Methode welche eine CSV Datein einliest via BufferedReader
*
* @throws IOException
*/
public List<Beruf> fileRead(String path) throws IOException {
List<Beruf> berufe = new ArrayList<>();
String line = "";
try {
//Path in Variable schrieben
String filePath = path;
FileReader fileReader = new FileReader(filePath);
BufferedReader reader = new BufferedReader(fileReader);
while ((line = reader.readLine()) != null) {
String[] attributes = line.split(";");
Beruf beruf = createBeruf(attributes);
berufe.add(beruf);
}
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return berufe;
}
private static Beruf createBeruf(String[] metadata) {
int id = Integer.parseInt(metadata[0]);
System.out.println(id);
int berufsschlüssel = Integer.parseInt(metadata[1]);
String bezeichnung = metadata[2];
return new Beruf(id, berufsschlüssel, bezeichnung);
}
}
我的 CSV 檔案
id;berufschlüssel;Bezeichnung
1;1104115;General
2;1104118;Hauptmann
3;1104121;Leutnant
4;1104122;Major
和我的 Berufe.java 類
package de.basler;
public class Beruf {
private int id;
private int berufsschlüssel;
private String Bezeichnung;
public Beruf(int id, int berufsschlüssel, String Bezeichnung) {
this.id = id;
this.berufsschlüssel = berufsschlüssel;
this.Bezeichnung = Bezeichnung;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getBerufsschlüssel() {
return berufsschlüssel;
}
public void setBerufsschlüssel(int berufsschlüssel) {
this.berufsschlüssel = berufsschlüssel;
}
public String getBezeichnung() {
return Bezeichnung;
}
public void setBezeichnung(String bezeichnung) {
Bezeichnung = bezeichnung;
}
}
問題是它總是從我的 csv 檔案中獲取第一行,我得到了錯誤
Exception in thread "main" java.lang.NumberFormatException: For input string: "id"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at de.basler.CSV_Reader.createBeruf(CSV_Reader.java:72)
at de.basler.CSV_Reader.fileRead(CSV_Reader.java:59)
at de.basler.Main.main(Main.java:33)
如果我洗掉第一行,它就像一個魅力,但我怎么能跳過第一行,這樣我就不需要洗掉它,因為我不允許這樣做。
uj5u.com熱心網友回復:
另一種快速方法是通過標志控制行讀取,如下所示:
public List<Beruf> fileRead(String filePath) throws IOException {
List<Beruf> berufe = new ArrayList<Beruf>();
String line = "";
try {
FileReader fileReader = new FileReader(filePath);
BufferedReader reader = new BufferedReader(fileReader);
Boolean firstLine = Boolean.TRUE;
while ((line = reader.readLine()) != null) {
if(firstLine) {
firstLine = Boolean.FALSE;
continue;
}
String[] attributes = line.split(";");
Beruf beruf = createBeruf(attributes);
berufe.add(beruf);
}
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return berufe;
}
uj5u.com熱心網友回復:
洗掉標題行的最簡單方法是在進入 while 回圈之前閱讀它。
String filePath = path;
FileReader fileReader = new FileReader(filePath);
BufferedReader reader = new BufferedReader(fileReader);
String headers = reader.readLine(); //This removes the first line from the BufferedReader
while ((line = reader.readLine()) != null) {
String[] attributes = line.split(";");
Beruf beruf = createBeruf(attributes);
berufe.add(beruf);
}
reader.close();
如果您使用 java 8 或更高版本并允許使用流,您還可以使用類的lines方法Files
Files.lines(Paths.get(filePath))
.skip(1) // skipping the headers
.map(line -> line.split(";"))
.map(attributes -> createBeruf(attributes))
.forEach(beruf -> berufe.add(beruf));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404647.html
標籤:
上一篇:與Twig的字串連接
