我正在制作一个文件读写器,可以访问指定的文件并保存/读取它。在读取文件时遇到了问题。文件内容包含由“|”分隔符分隔的整数、字符串和双精度浮点数。我使用StringTokenizer来分离token并将它们保存到每个单独的变量中,但是当我读取整数时,即使字符串仅包含int,也会出现NumberFormatException。
这里是代码:
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());
}
}
文件中的一行示例:
8502113|Aarau|47.391355|8.051251
而错误是:
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)
我是否遗漏了什么?StringTokenizer 是否以我不知道的某种方式篡改了字符串?
编辑:以下是创建文件的代码:
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();
length()
,以查看字符数量是否与你所看到的相符。 - PshemoU+FEFF
Unicode 字符。 - Madhawa Priyashantha