我在一个文件夹中有多个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){
}
}
}
感谢您的帮助
答案 0 :(得分:3)
每次调用
PrintWriter out = new PrintWriter("C:/html/output/output.txt", "UTF-8");
您正在创建新文件(这意味着删除旧文件)。你想要的是让作家将数据附加到现有文件,或者如果不存在则创建一个。
因此,如果您想设置编码,可以使用
OutputStreamWriter(OutputStream out, String charsetName)
并且因为它接受OutputStream而不是Writer,将文件设置为输出并使其附加使用
FileOutputStream(String name, boolean append)
您将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
块内的作者/读者/流。您应该在finally
块中执行此操作。为了简化操作,您可以使用try-with-resources。也永远不要将catch
块留空,始终至少使用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();
}
}