我的代码的文件输出限制是多少?

我刚刚制作了一个非常简单的解析器,它从文件中获取输入并输出到文件中。


它对您提供的文件进行逐行解析,并对文件的所有行迭代相同的函数,然后将整个字符串重定向到另一个文件。


我给parseLine函数一个JsonObjectBuilder以便它可以继续向输出字符串添加类似 json 的结构(它是 json 解析器的普通文本)。


解析文件函数


private String parseFile(String file) throws IOException {

    BufferedReader reader = new BufferedReader(new FileReader (file));

    JsonObjectBuilder jsonBuilder = Json.createObjectBuilder();


    String line;

    try{

      while((line = reader.readLine()) != null){

        parseLine(line, jsonBuilder);

      }

    } finally {

      reader.close();

    }

    return jsonBuilder.build().toString();

  }

解析器类


public Parser(String file) throws IOException {

    PrintWriter out = new PrintWriter(System.getProperty("user.dir") + "/parser/src/main/resources/logFormatted.log");

    System.out.println("Initiated Parser class!");

    out.println(parseFile(file));

  }

parseLine 函数


private JsonObjectBuilder parseLine(String line, JsonObjectBuilder jsonBuilder){

    String timestamp = null;

    String eventCode = null;

    String payload = null;


    String finalString = null;

    try {

        timestamp = line.substring(0, 23);

        eventCode = line.substring(24, 28);

        payload = line.substring(29, line.length());


        jsonBuilder.add(timestamp, Json.createObjectBuilder()

                      .add("eventCode", eventCode)

                      .add("payload", payload)

                    );

    } catch (Exception ex) {

      System.out.println("ERROR: " + ex);

    }

    return jsonBuilder;

  }

主要的


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

        Parser parser = new Parser(System.getProperty("user.dir") + "/parser/src/main/resources/newFormatLog.log");

    }

这段代码的问题在于,当它被执行时,它会像预期的那样进行解析,但不会解析整个文件。现在我给它一个 ~4550 行的文件,但它确实输出了一个 ~4400 行的文件。


我真的不知道为什么,我开始认为字符串太大而无法处理。也许我需要立即将这些行输出到文件中,而不是做最后的大动作。非常感谢所有帮助!


慕桂英3389331
浏览 162回答 1
1回答

阿晨1998

发现问题了。这真的很愚蠢。public Parser(String file) throws IOException {    PrintWriter out = new PrintWriter(System.getProperty("user.dir") + "...");    System.out.println("Initiated Parser class!");        out.println(parseFile(file));  }在这个构造函数中,我没有关闭 PrintWriter。刚刚添加out.close();,一切都按预期工作。public Parser(String file) throws IOException {    try (PrintWriter out = new PrintWriter(System.getProperty("user.dir") + "...")) {        System.out.println("Initiated Parser class!");        out.println(parseFile(file));     }  }您可以参考这个其他问题作为参考。编辑:try(PrintWriter out = ...)按照评论中的建议添加
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java