So mache ich Datei-Reader/Writer, die auf eine bestimmte Datei zugreifen und speichern/lesen kann. Ich habe ein Problem beim Lesen aus der Datei. Die Inhalte sind Integer, String und Doppel getrennt durch "|" Trennzeichen. Ich benutze StringTokenizer, um die Token zu trennen und sie an jeder einzelnen Variablen zu speichern, aber wenn ich die Ganzzahlen lese, bekomme ich eine NumberFormatException, obwohl die Zeichenfolge nur ein int enthält. HierNumberFormatException beim Analysieren eines int
ist der Code:
FileReader fr = new FileReader(filename);
BufferedReader buff = new BufferedReader(fr);
String line;
while ((line = buff.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, "|");
while (st.hasMoreElements()) {
int Id = Integer.parseInt(st.nextToken());
String Name = st.nextToken();
double cordX = Double.parseDouble(st.nextToken());
double cordY = Double.parseDouble(st.nextToken());
}
}
Ein Beispiel Zeile der Datei:
8502113|Aarau|47.391355|8.051251
Und der Fehler:
java.lang.NumberFormatException: For input string: "8502113"
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 storage.FileUtilities.readCitiesFromFile(FileUtilities.java:63)
at basics.Test.main(Test.java:16)
Fehle ich etwas hier? Verändert StringTokenizer die Zeichenfolge auf eine Art und Weise, die ich nicht kenne?
EDIT: Hier ist der Code, der die Datei erstellt:
FileWriter fw = new FileWriter(filename, !overwrite); // For FileWriter true = append, false = overwrite, so we flip the value.
BufferedWriter buff = new BufferedWriter(fw);
String coordConvertor;
for (int i = 0; i <= cities.size() - 1; i++) {
buff.write(Integer.toString(cities.get(i).getId()));
buff.write("|");
buff.write(cities.get(i).getName());
buff.write("|");
coordConvertor = Double.toString(cities.get(i).getCoord().getX());
buff.write(coordConvertor);
buff.write("|");
coordConvertor = Double.toString(cities.get(i).getCoord().getY());
buff.write(coordConvertor);
buff.newLine();
Ich kann Ihr Problem nicht reproduzieren. Möglicherweise enthält Ihre Datei einige unsichtbare Zeichen (wie die BOM-Markierung, die normalerweise am Anfang der Datei platziert wird). Lies diesen Teil als String und drücke ihn statt "layout()", um zu sehen, ob die Anzahl der Zeichen mit dem übereinstimmt, was du siehst. – Pshemo
"8502113" enthält 'U + FEFF' Unicode-Zeichen –
@Pshemo Tatsächlich haben Sie Recht. Die Länge scheint +1 zu sein. Wie kann ich das beheben? Gibt es eine Möglichkeit, das zusätzliche Zeichen am Anfang der Datei zu trimmen? EDIT: Die Datei ist eine Standard-TXT-Datei – Akaitenshi