为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英3389331 2021-12-01 20:02:27
我刚刚制作了一个非常简单的解析器,它从文件中获取输入并输出到文件中。它对您提供的文件进行逐行解析,并对文件的所有行迭代相同的函数,然后将整个字符串重定向到另一个文件。我给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 行的文件。我真的不知道为什么,我开始认为字符串太大而无法处理。也许我需要立即将这些行输出到文件中,而不是做最后的大动作。非常感谢所有帮助!
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

发现问题了。这真的很愚蠢。


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 = ...)按照评论中的建议添加


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信