使用BufferedReader从文件中读取

时间:2017-03-21 00:31:59

标签: java bufferedreader java-io

基本上我有一个从.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文件中的另一个错误!事实证明,只有一个空格而不是双空格。它似乎现在正在运作。但是关于如何在将来处理这样的文件错误的任何建议?

2 个答案:

答案 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个空格。

该方法应该对提取的值做什么(例如,将它们返回到某种类型的对象中,或者直接将它们保存到数据库中)取决于使用它的应用程序。