基本上我有一个从.txt文件中读取多行的赋值。 每行文本文件中有4个值,每个值用2个空格分隔。 文件中大约有10行数据。
从文件中获取输入后,程序将其放入数据库。数据库连接功能正常。
我现在的问题是使用BufferedReader从文件中读取。 问题是,如果我取消注释底部3行中的任何一行,BufferedReader将读取所有其他行。如果我不使用它们,则会出现异常,因为下一个输入是String类型。 我已经考虑过使用带有.hasNextLine()方法的扫描仪。
对可能出现的问题以及如何解决问题的想法? 感谢。
File file = new File(FILE_INPUT_NAME);
FileReader fr = new FileReader(file);
BufferedReader readFile = new BufferedReader(fr);
String line = null;
while ((line = readFile.readLine()) != null) {
String[] split = line.split(" ", 4);
String id = split[0];
nameFromFile = split[1];
String year = split[2];
String mark = split[3];
idFromFile = Integer.parseInt(id);
yearOfStudyFromFile = Integer.parseInt(year);
markFromFile = Integer.parseInt(mark);
//line = readFile.readLine();
//readFile.readLine();
//System.out.println(readFile.readLine());
}
编辑:.txt文件的格式错误。缺少价值。 但现在我得到一个ArrayOutOfBoundsException。
编辑编辑:.txt文件中的另一个错误!事实证明,只有一个空格而不是双空格。它似乎现在正在运作。但是关于如何在将来处理这样的文件错误的任何建议?
答案 0 :(得分:1)
问题在于,如果我取消注释底部3行中的任何一行,BufferedReader会读取所有其他行。
正确。如果您放入任何这些代码行,读取的文本行将被丢弃并且不会被处理。您已经在while
条件下阅读了。你不需要另外阅读。如果您放入任何这些线路,它们将被丢弃并且不会进行处理
答案 1 :(得分:0)
发布的代码的可编译版本可能是
GenericDao
以上使用单个空格( public void read() throws IOException {
File file = new File(FILE_INPUT_NAME);
FileReader fr = new FileReader(file);
BufferedReader readFile = new BufferedReader(fr);
String line;
while ((line = readFile.readLine()) != null) {
String[] split = line.split(" ", 4);
if (split.length != 4) { // Not enough tokens (e.g., empty line) read
continue;
}
String id = split[0];
String nameFromFile = split[1];
String year = split[2];
String mark = split[3];
int idFromFile = Integer.parseInt(id);
int yearOfStudyFromFile = Integer.parseInt(year);
int markFromFile = Integer.parseInt(mark);
//line = readFile.readLine();
//readFile.readLine();
//System.out.println(readFile.readLine());
}
}
而不是原始" "
)。为了分割任意数量的变化,可以使用正则表达式,例如, " "
。当然,如果它反映了输入数据的结构,也可以使用正好2个空格。
该方法应该对提取的值做什么(例如,将它们返回到某种类型的对象中,或者直接将它们保存到数据库中)取决于使用它的应用程序。