我有一个文本文件,提供22个高尔夫球场的信息,包括球场名称,名称,位置,设计师,果岭费,标准杆,建造年份和总码数。在我读入时,每行需要存储到适当的变量,然后用于创建一些对象。该文件的第一行是文本文件中的高尔夫球场数。
FileInputStream fstream = new FileInputStream(System.getProperty("user.dir")
+ "\\GolfCourses.txt");
//use file
DataInputStream in = new DataInputStream(fstream);
//read input
BufferedReader br = new BufferedReader(new InputStreamReader(in));
Tree newTree = new Tree();
try{
String line = br.readLine();
if(line==null)
throw new IOException();
int clubs = Integer.parseInt(line);
for(int i = 0; i < clubs; i++){
String name = br.readLine();
String location = br.readLine();
double fee = Double.parseDouble(br.readLine());
int par = Integer.parseInt(br.readLine());
String designer = br.readLine();
int built = Integer.parseInt(br.readLine());
int yards = Integer.parseInt(br.readLine());
newTree.insert(new TreeNode(new GolfCourse(name, location, designer, fee, par, built, yards)));
}
in.close();
}catch(IOException e){
System.out.println(e);
}
读入似乎超前于自身,因此程序试图解析字符串而不是数字。我之前从来没有遇到过这个问题所以我迷失了如何修复它。
编辑:代码现在按预期工作。这个问题来自for循环的“i&lt; = club”。感谢您抽出宝贵时间提供帮助!
答案 0 :(得分:1)
这是因为你的第一个br.readLine()
会从文件中获得第一行,即俱乐部的数量。在if
语句失败后,您正在调用br.readLine()
。此调用将获得下一行,因为第一行已在br.realLine()
语句中对if
的最后一次调用中重新执行。
试试这个:
String line = br.readLine();
if(line == null) {
throw new IOException();
}
int clubs = Integer.parseInt(line);
答案 1 :(得分:1)
阅读如下文件:
File f = new File("Path");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
Retriving of Fields:
如果高尔夫球场,名称,位置等字段在一行中,每个条目都以“单一空格”分隔:
- 使用split(" ");
如果字段如高尔夫球场,名称,位置每行一个:
- 使用split("\n");
Not "\\" but "\"
- 将for-loop
与count of 8
一起使用,以获得8个字段。
创建对象:
- 创建一个包含8个字段的Java bean
,以保存这些值。