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

时间:2018-10-23 08:01:32

标签: java file-writing

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

它对您提供的文件进行逐行分析,并对文件的所有行重复相同的功能,然后将整个字符串重定向到另一个文件。

我为parseLine函数提供了一个 JsonObjectBuilder ,以便它可以继续在输出字符串中添加类似json的结构(这是json解析器btw的普通文本)。

parseFile函数

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 个答案:

答案 0 :(得分:0)

找出问题所在。真是愚蠢。

cat $HOME/Documents/out.txt | ( grep -m 1 .^[[\(].*[[:alnum:]].?[\)]*.[[:space:]]*.[[:alnum:]]] )

在此构造函数中,我没有关闭PrintWriter。只需添加public Parser(String file) throws IOException { PrintWriter out = new PrintWriter(System.getProperty("user.dir") + "..."); System.out.println("Initiated Parser class!"); out.println(parseFile(file)); } ,一切都会按预期进行。

out.close();

您可以参考其他this个问题。

编辑:按照评论中的建议添加了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)); } }