我的代码的文件输出限制是什么?
What are the file output limits with my code?
我刚刚做了一个非常简单的解析器,它从文件获取输入并输出到文件。
它对您提供的文件进行逐行解析,并对文件的所有行重复相同的函数,然后将整个字符串重定向到另一个文件。
我给 parseLine
函数一个 JsonObjectBuilder 以便它可以继续向输出字符串添加类似 json 的结构(这是一个普通文本json 解析器 btw).
解析文件函数
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();
}
解析器class
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 行的文件。
我真的不知道为什么,我开始认为字符串太大而无法处理什么的。也许我需要立即将行输出到文件而不是做最后的大写。非常感谢所有帮助!
找到问题了。真的很蠢
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));
}
}
您可以参考this其他问题作为参考。
编辑: 根据评论
添加了 try(PrintWriter out = ...)
我刚刚做了一个非常简单的解析器,它从文件获取输入并输出到文件。
它对您提供的文件进行逐行解析,并对文件的所有行重复相同的函数,然后将整个字符串重定向到另一个文件。
我给 parseLine
函数一个 JsonObjectBuilder 以便它可以继续向输出字符串添加类似 json 的结构(这是一个普通文本json 解析器 btw).
解析文件函数
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();
}
解析器class
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 行的文件。
我真的不知道为什么,我开始认为字符串太大而无法处理什么的。也许我需要立即将行输出到文件而不是做最后的大写。非常感谢所有帮助!
找到问题了。真的很蠢
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));
}
}
您可以参考this其他问题作为参考。
编辑: 根据评论
添加了try(PrintWriter out = ...)