Java PrintWriter在执行close()函数之前擦除文件内容
我试图用PrintWriter编写解析后的HTML内容,以便将HTML转换为其他格式。但是PrintWriter会在执行close()函数之前擦除文件内容,我可以使用其他文件写入技术,但我想知道为什么PrintWriter会这样做Java PrintWriter在执行close()函数之前擦除文件内容,java,printwriter,Java,Printwriter,我试图用PrintWriter编写解析后的HTML内容,以便将HTML转换为其他格式。但是PrintWriter会在执行close()函数之前擦除文件内容,我可以使用其他文件写入技术,但我想知道为什么PrintWriter会这样做 for (Element element : elements) { if (element.tagName() == "a") { PrintWriter writer2 = new PrintWriter("
for (Element element : elements) {
if (element.tagName() == "a") {
PrintWriter writer2 = new PrintWriter("contenthtml.html", "UTF-8");
writer2.print(a.ExtractHTMLByIDandDomain(Domain + element.attr("href"), Content_HTML_ID));
Process proc = Runtime.getRuntime().exec("pandoc -f html -t asciidoc contenthtml.html >> contentasciidoc.adoc");
//Thread.sleep(5000); //I have tried wait but it didn't work
writer2.flush();
writer2.close();
}
在调用
flush()
如果将
flush()
移动到exec()
之前,它可能会工作。在调用flush()
如果将
flush()
移动到exec()
之前,它可能会起作用。您的代码有一些问题:
element.getTagName()
是“a”,那么粘贴的第2行上的If
是否实际触发取决于具体情况,但可能不会PrintWriter
是一种资源。需要关闭资源;如果不关闭它们,资源将无限期地保持打开状态,这称为资源泄漏。使用自动资源管理结构可以方便地执行此操作#!/bin/sh
pandoc -f html -t asciidoc contenthtml.html >> contentasciidoc.asciidoc
并更新您的java代码:
for (Element element : elements) {
if ("a".equalsIgnoreCase(element.tagName()) {
try (PrintWriter writer2 = new PrintWriter("contenthtml.html", "UTF-8")) {
writer2.print(a.ExtractHTMLByIDandDomain(Domain + element.attr("href"), Content_HTML_ID));
}
}
Process proc = Runtime.getRuntime().exec("/usr/bin/bash run.sh");
}
您的代码存在一些问题:
element.getTagName()
是“a”,那么粘贴的第2行上的If
是否实际触发取决于具体情况,但可能不会PrintWriter
是一种资源。需要关闭资源;如果不关闭它们,资源将无限期地保持打开状态,这称为资源泄漏。使用自动资源管理结构可以方便地执行此操作#!/bin/sh
pandoc -f html -t asciidoc contenthtml.html >> contentasciidoc.asciidoc
并更新您的java代码:
for (Element element : elements) {
if ("a".equalsIgnoreCase(element.tagName()) {
try (PrintWriter writer2 = new PrintWriter("contenthtml.html", "UTF-8")) {
writer2.print(a.ExtractHTMLByIDandDomain(Domain + element.attr("href"), Content_HTML_ID));
}
}
Process proc = Runtime.getRuntime().exec("/usr/bin/bash run.sh");
}
第一:请阅读一篇试图理解rzwitserloot所写的答案的文章,因为它包含了一些有效的建设性批评 要回答您的问题,为什么
PrintWriter
会删除现有的文件内容:它就是这样设计的。如果您在文档中查找PrintWriter
,您可以在此处找到:
关于文件
参数的部分:
文件-用作此写入程序目标的文件。
如果文件存在,那么它将被截断为零大小;否则,将创建一个新文件。输出将写入文件并进行缓冲
第一:请阅读一篇试图理解rzwitserloot所写的答案的文章,因为它包含了一些有效的建设性批评 要回答您的问题,为什么
PrintWriter
会删除现有的文件内容:它就是这样设计的。如果您在文档中查找PrintWriter
,您可以在此处找到:
关于文件
参数的部分:
文件-用作此写入程序目标的文件。
如果文件存在,那么它将被截断为零大小;否则,将创建一个新文件。输出将写入文件并进行缓冲
你能把它打印到第4行的System.out吗?为什么不在第4行之后立即冲洗?可以将其打印到第4行的System.out吗?你为什么不在四号线后马上冲水呢?