Java:将使用Jsoup解析的多个文件的结果写入文本文件

Java:将使用Jsoup解析的多个文件的结果写入文本文件,java,html,file,jsoup,Java,Html,File,Jsoup,我在一个文件夹中有多个html文件:下面的代码列出了所有这些文件,然后用Jsoup解析它们:我没有成功地将所有这些用Jsoup解析的文件的结果写入文本文件:我只得到最后一个解析的文件的结果。 怎么了 代码是: package jsouppackage; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import org.jsoup.Jsoup; import org.jsoup.nod

我在一个文件夹中有多个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){

        }
    }
}
package-jsuppackage;
导入java.io.File;
导入java.io.IOException;
导入java.io.PrintWriter;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Document;
导入org.jsoup.nodes.Element;
导入org.jsoup.select.Elements;
公共班机{
公共静态void main(字符串[]args){
文件输入=新文件(“C:/html”);
File[]st=input.listFiles();
对于(int i=0;i
感谢您每次调用时提供的帮助

PrintWriter out = new PrintWriter("C:/html/output/output.txt", "UTF-8");
您正在创建新文件(这意味着旧文件已被删除)。您需要的是让writer将数据附加到现有文件中,或者如果不存在,则创建一个

因此,如果要设置编码,可以使用

OutputStreamWriter(OutputStreamOut,字符串charsetName)

由于它接受OutputStream而不是Writer,所以要将文件设置为输出并使其附加使用

FileOutputStream(字符串名,布尔追加)

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
decorator添加缓冲来提高性能

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中关闭writer/reader/streams。您应该在
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();
    }
}
每次调用

PrintWriter out = new PrintWriter("C:/html/output/output.txt", "UTF-8");
您正在创建新文件(这意味着旧文件已被删除)。您需要的是让writer将数据附加到现有文件中,或者如果不存在,则创建一个

因此,如果要设置编码,可以使用

OutputStreamWriter(OutputStreamOut,字符串charsetName)

由于它接受OutputStream而不是Writer,所以要将文件设置为输出并使其附加使用

FileOutputStream(字符串名,布尔追加)

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
decorator添加缓冲来提高性能

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中关闭writer/reader/streams。您应该在
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();
    }
}
每次调用

PrintWriter out = new PrintWriter("C:/html/output/output.txt", "UTF-8");
您正在创建新文件(这意味着旧文件已被删除)。您需要的是让writer将数据附加到现有文件中,或者如果不存在,则创建一个

因此,如果要设置编码,可以使用

OutputStreamWriter(OutputStreamOut,字符串charsetName)

由于它接受OutputStream而不是Writer,所以要将文件设置为输出并使其附加使用

FileOutputStream(字符串名,布尔追加)

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
decorator添加缓冲来提高性能

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中关闭writer/reader/streams。您应该在
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();
    }
}
每次调用

PrintWriter out = new PrintWriter("C:/html/output/output.txt", "UTF-8");
您正在创建新文件(这意味着旧文件已被删除)。您需要的是让writer将数据附加到现有文件中,或者如果不存在,则创建一个

因此,如果要设置编码,可以使用

OutputStreamWriter(OutputStreamOut,字符串charsetName)

由于它接受OutputStream而不是Writer,所以要将文件设置为输出并使其附加使用

FileOutputStream(字符串名,布尔追加)

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
decorator添加缓冲来提高性能

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中关闭writer/reader/streams。您应该在
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();
    }
}

阅读:好的,谢谢你的有用信息阅读:好的,谢谢你的有用信息阅读:好的,谢谢你的有用信息阅读:好的,谢谢你的有用信息哇,太棒了,谢谢!我可以问你什么是“fos”吗?BufferedWriter decorator是什么?decorator