【问题标题】:Parsing a text file using java bufferedReader and Scanner使用 java bufferedReader 和 Scanner 解析文本文件
【发布时间】:2020-10-18 21:32:24
【问题描述】:

我有以下配置文件,我试图用它来在我的程序中设置全局变量

OUTPUT_FILE_PATH = filename2.txt
MAX_CRAWL_DEPTH = 2
NUMBER OF CRAWLERS = 10
SEED_URL = https://www.lehigh.edu/home
DOMAIN = lehigh.edu
DELAY = 10

为了解析这个文本文件,我正在使用这个

String line = "";
            BufferedReader buffRead = new BufferedReader(new FileReader((CONFIG_FILE_PATH)));
            Scanner charlie = new Scanner(line);

            String varName;
            while ((line = buffRead.readLine()) != null){
                System.out.println(line);
                charlie.useDelimiter(" = ");
                varName = charlie.next();
                System.out.println(varName);



                if (varName == "OUTPUT_FILE_PATH")
                    OUTPUT_FILE_PATH = charlie.next();
                else if (varName == "MAX_CRAWL_DEPTH")
                    MAX_CRAWL_DEPTH = charlie.nextInt();
                else if (varName == "NUMBER_OF_CRAWLERS")
                    NUMBER_OF_CRAWLERS = charlie.nextInt();
                else if (varName == "SEED_URL")
                    SEED_URL = charlie.next();
                else if (varName == "DOMAIN")
                    DOMAIN = charlie.next();
                else if (varName == "DELAY")
                    delay = charlie.nextInt();
            }

我在运行代码时得到这个输出

OUTPUT_FILE_PATH = filename2.txt
Exception in thread "main" java.util.NoSuchElementException
        at java.base/java.util.Scanner.throwFor(Scanner.java:937)
        at java.base/java.util.Scanner.next(Scanner.java:1478)
        at Globals.setGlobals(Globals.java:44)

第 44 行是我设置 varName = charlie.next(); 有什么理由会出错?有关如何解析此文件的任何其他提示?我觉得我的 if 语句不是最好的方法。

【问题讨论】:

    标签: java file parsing bufferedreader


    【解决方案1】:

    它抛出 NoSuchElementException 是因为您在此行的扫描仪实例中提供的字符串:

    Scanner charlie = new Scanner(line);
    

    其实只是:

    Scanner charlie = new Scanner("");
    

    因为您在将line 设置为"" 后从未修改过它。

    您应该执行以下操作:

    Scanner charlie = new Scanner(System.in);
    

    此外,Scanner 实例不接受字符串。

    【讨论】:

      【解决方案2】:

      我需要在每次更新后的while循环中定义扫描仪,谢谢大家

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-21
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 2016-03-14
        • 1970-01-01
        • 2018-05-15
        相关资源
        最近更新 更多