gpt4 book ai didi

Java : write results from multiple files parsed with Jsoup to text file

转载 作者:行者123 更新时间:2023-12-01 22:38:23 24 4
gpt4 key购买 nike

我在一个文件夹中有多个html文件:下面的代码列出了所有这些文件,然后用Jsoup解析它们:我没有成功地将用Jsoup解析的所有这些文件的结果写入文本文件:我只得到最后一个文件的解析结果。怎么了?

代码是:

package jsouppackage;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Main {

public static void main(String[] args) {
File input = new File("C:/html");
File[] st = input.listFiles();
for (int i = 0; i < st.length; i++) {
if(st[i].isFile()){
parse(st[i]);
}
}

}

private static void parse(File input ) {
Document doc;

try{

doc = Jsoup.parse(input, "UTF-8", "");


Elements ids = doc.select("div[id^=osdi] p");
PrintWriter out = new PrintWriter("C:/html/output/output.txt", "UTF-8");

for (Element id : ids){

out.println("\n"+id.text());

}
out.close();

}catch(IOException e){

}
}
}

感谢您的帮助

最佳答案

每次调用

PrintWriter out = new PrintWriter("C:/html/output/output.txt", "UTF-8");

您正在创建新文件(这意味着旧文件被删除)。您想要的是让 writer 将数据附加到现有文件,或者如果不存在则创建一个。

所以如果你想设置编码,你可以使用

OutputStreamWriter(OutputStream out, String charsetName)

由于它接受 OutputStream 而不是 Writer,因此将文件设置为输出并使其追加使用

FileOutputStream(字符串名称, boolean 值附加)

append 参数设置为 true

<小时/>

换句话说,你可以使用

String outputFile = "C:/html/output/output.txt";
FileOutputStream fos = new FileOutputStream(outputFile, true);
PrintWriter out = new PrintWriter(new OutputStreamWriter(fos, "UTF-8"));

或者为了提高性能,使用 BufferedWriter 装饰器添加缓冲

String outputFile = "C:/html/output/output.txt";
FileOutputStream fos = new FileOutputStream(outputFile, true);
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(fos, "UTF-8")));
<小时/>

顺便说一句,您不应该在 try block 内关闭编写器/读取器/流。您应该在finally block 中执行此操作。为了使事情变得更容易,您可以使用 try-with-resources。也永远不要将 catch block 留空,始终至少使用 e.printStackTrace();

打印有关抛出异常的信息

所以你的解析方法可以看起来像

private static void parse(File input) {

String outputFile = "C:/html/output/output.txt";

try (FileOutputStream fos = new FileOutputStream(outputFile, true);
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(fos, "UTF-8")))) {

Document doc = Jsoup.parse(input, "UTF-8", "");
Elements ids = doc.select("div[id^=osdi] p");

for (Element id : ids) {
out.println("\n" + id.text());
}
//out.close(); // this will be invoked automatically now
} catch (IOException e) {
e.printStackTrace();
}
}

关于Java : write results from multiple files parsed with Jsoup to text file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26561498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com