繁体   English   中英

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

[英]Is there a way to check if Java has started reading a new line in a text file when reading in a text 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();
    }

}

我期望第一行的输出是从第一行中提取的信息

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

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

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

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

除此之外,这不涉及引号,转义,延续行等。真正的问题是CSV语法没有简单的上下文无关定界符。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM