似乎指向loadDogs();和项目[1],但我没有看到任何问题。以前使用相同的代码工作,然后我开始出现这些错误。我以前支持过这个代码,但是当我使用备份代码时;结果仍然存在。我试着修了一个小时,但它没有消失。它编译虽然运行它会抛出eclipse中的错误。
public class DogCompetitionManager {
private final String DOGS_FILE = "res/dogs.txt";
private final String COURSE_FILE = "res/courses.txt";
private ArrayList<Dogs> dogsList;
private ArrayList<Courses> courseList;
public DogCompetitionManager()
{
loadDogs();
loadCourses();
runAdministration();
}
private void loadDogs()
{ // creates a dogsList array
dogsList = new ArrayList<Dogs>();
BufferedReader inFile = null;
try
{
inFile = new BufferedReader(new FileReader(DOGS_FILE));
String line = inFile.readLine();
while(line != null)
{
String[] items;
items = line.split(" ");
dogsList.add(new Dogs(items[0],
items[1],
Double.parseDouble(items[2]),
Integer.parseInt(items[3]),
items[4]));
line = inFile.readLine();
}
inFile.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
永远不要相信用户输入!
String[] items;
items = line.split(" ");
dogsList.add(new Dogs(items[0],
items[1],
Double.parseDouble(items[2]),
Integer.parseInt(items[3]),
items[4]));
在这里,您可以分割输入行,并期望它具有特定格式。这很不稳定。你首先应该确定,实际行该格式并相应地处理它,如果它没有。
至少你应该对错误做一些输出。然后你可以忽略该行并处理文件的其余部分,或者你可以抛出异常,中止进程。取决于您的要求。
一个简单的检查是查看String[]
在分割后是否包含您期望的项目(或者可能为null)。
示例:
if( null == items || items.length < 5 ) {
// 1. LOG ERROR
// To ignore line and move on:
line = inFile.readLine();
continue;
}
更复杂的一种是使用某种RegEx来查看是否有数字,你期望它们等等。我还建议在将字符串转换为数值时捕获Parse-Errors。