Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用BufferedReader从文件中读取_Java_Bufferedreader_Java Io - Fatal编程技术网

Java 使用BufferedReader从文件中读取

Java 使用BufferedReader从文件中读取,java,bufferedreader,java-io,Java,Bufferedreader,Java Io,基本上我有一个任务,从一个.txt文件中读取多行。 文本文件中每行有4个值,每个值之间用2个空格分隔。 文件中大约有10行数据 从文件中获取输入后,程序将其放入数据库。数据库连接功能工作正常 我现在的问题是使用BufferedReader读取文件。 问题是,如果我取消注释底部3行中的任何一行,BufferedReader每隔一行读取一次。如果我不使用它们,那么会有一个异常,因为下一个输入是String类型的。 我已经考虑过使用带有.hasNextLine()方法的扫描仪 你有没有想过会出现什么问

基本上我有一个任务,从一个.txt文件中读取多行。 文本文件中每行有4个值,每个值之间用2个空格分隔。 文件中大约有10行数据

从文件中获取输入后,程序将其放入数据库。数据库连接功能工作正常

我现在的问题是使用BufferedReader读取文件。 问题是,如果我取消注释底部3行中的任何一行,BufferedReader每隔一行读取一次。如果我不使用它们,那么会有一个异常,因为下一个输入是String类型的。 我已经考虑过使用带有.hasNextLine()方法的扫描仪

你有没有想过会出现什么问题以及如何解决? 谢谢

编辑:.txt文件的格式有错误。缺少的值。 但现在我得到了一系列的边界感知


编辑:在.txt文件中出现另一个错误!原来只有一个空格而不是两个空格。它现在似乎起作用了。但是关于将来如何处理这样的文件错误有什么建议吗?

可以发布可编译版本的代码

  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());
    }
  }
上面使用了一个空格(
,而不是原来的
)。要根据任意数量的更改进行拆分,可以使用正则表达式,例如
“\\s+”
。当然,如果这反映了输入数据的结构,那么也可以使用2个空格

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

问题是,如果我取消注释底部3行中的任何一行,BufferedReader每隔一行读取一次


对。如果您放入这些代码行中的任何一行,那么读取的文本行将被丢弃,而不会被处理。您已在
状态下读取,而
状态为。你不需要再读一遍。如果您将这些行中的任何一行放入,它们将被丢弃,并且不会在while循环中进行处理,因为您正在一次读取一行到变量
line
,该变量随后被
拆分为
id
名称fromfile
年份
标记
-您为什么要进一步阅读循环中的
-这是重复的-请提供有关您发布代码的方法的更多详细信息。它是否会抛出一个
IOException
?您正在从.txt文件中读取什么类型的数据?它们是每行4个令牌(字符串或数字)?注释掉的3行最有可能保留为注释掉。:-)@JacobO用您当前的全部错误更新您的答案。对于开始更改
String[]split=line.split(“,4”)
to
String[]split=line.split(“”)您可能试图读取底部的空行。你应该把你的BufferedReader放在一个Try-and-Catch块上。您还可以删除最后一行。谢谢,我发现了错误,原来是在读取它的文件中。我从文件中读取的方式是一个双空格,因为名称字段的工作方式类似于“Bob B”,所以firstname和lastname都在同一个字段中。如果没有读取4个令牌,您肯定需要确保执行某些操作。加上许多其他的错误处理方法。快乐编码!:-)非常感谢。我已经在做异常,但是是的,少于4个令牌绝对是一个优先修复!
  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());
    }
  }