读取文本文件时,有没有办法检查Java是否已开始读取文本文件中的新行

时间:2018-12-27 21:58:17

标签: java file

我正在创建一个程序,该程序读取大块数据,我需要将它们分开,我想知道java中是否有一个函数,当Java开始以新行开始读取时,该函数会通知我,我使用扫描仪读取文本文件的方式,如果发生任何更改,这些文件也是CSV文件。

我尝试过在线寻找解决此问题的方法,还阅读了扫描仪可以执行的功能以及找不到有用的东西

公共类ScannerReading {

public static void main(String[] args) throws FileNotFoundException {

    File file = new File("C:\\myfile.txt");
    Scanner scanner = new Scanner(file);
    scanner.useDelimiter(",");
    String data = scanner.nextLine();
    data = scanner.nextLine();

    while(scanner.hasNext()){
        if(data.contains("  ")) {
            System.out.println("I have a line lol");
            }
        System.out.print(data+" ");
        }
    scanner.close();
    }

}

我希望输出第1行:从第一行中提取的信息

1 个答案:

答案 0 :(得分:2)

您的问题的直接答案是,使用Scanner::next / Scanner::hasNext时无法找出是否刚刚开始新行。更一般而言,没有办法找出最后一个分隔符是什么。分隔符将被丢弃。

正如JB Nizet所说的那样,有许多现有的开源CSV阅读器库,因此不需要使用Scanner来实现此功能。实际上,正确实现CSV读取 并非易事,尤其是在需要实现标头,引号,转义和/或续行的情况下。建议使用现有的库。

但是,如果(反对建议!)您决定直接实现阅读器,那么更健壮的方法是使用嵌套循环:

  • 外部循环使用nextLine读取整行
  • 内部循环为每一行创建一个Scanner,以将其拆分为字段。

除了不处理引号,转义,续行等。真正的问题是CSV语法没有简单的上下文无关定界符。

  

我想我也许可以使用某种计数器来计数[字段]

是的...但是,如果CSV中的某些行缺少字段(例如,由于人为错误),则对字段进行计数将无法检测到这一点。