Слияние файлов HTML в Java с помощью JSoup

Я пытаюсь объединить несколько .html файлы в один .html файл с помощью Jsoup. Я думал, чтобы получить список .html файлы в dir и хранить имена в ArrayList, Я бы тогда loop сквозь ArrayList, передавая каждое имя файла как строку в метод Jsoup.parse().

Я могу заселить ArrayList без проблем, и мой код работал для одного файла за раз, но когда я добавил в for loops ниже NEW_INFORMATION.html файл создан, но ничего не заполняется. Есть идеи о том, что мне не хватает?

Вот текущий код:

public class mergeFiles {

    public static void main(String[] args) throws IOException {

        File outputFile = new File ("C:\\Users\\1234\\Desktop\\PowerShellOutput\\NEW_INFORMATION.html");
        File dir = new File ("C:\\Users\\1234\\Desktop\\PowerShellOutput\\");
        File [] paths;
        //Only capture files with extension .html
        FilenameFilter fileNameFilter = new FilenameFilter(){
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                if (name.lastIndexOf('.') > 0) {
                    int lastIndex = name.lastIndexOf('.');
                    String extension = name.substring(lastIndex);
                    if(extension.equals(".html")){
                        return true;
                    }
                }
                return false;
            }
        };      
        paths = dir.listFiles(fileNameFilter);
        List<String> list = new ArrayList<String>();
        for (File x : paths){
            list.add(x.toString());
        }
        System.out.print(list);
        for (String s : list){
            File input = new File(s);
            Document doc = Jsoup.parse(input, "UTF-8"); 
            Elements links = doc.select("table");
            @SuppressWarnings("resource")
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new       FileOutputStream(outputFile), "UTF-8"));
            bw.append("<h2>" + s.toString() + "<h2>");
            bw.append(links.toString());
        }
    }
}

Я также попробовал этот вариант без преобразования путей в строки (тот же результат):

for (File x : paths){
        Document doc = Jsoup.parse(x, "UTF-8"); 
        Elements links = doc.select("table");
        @SuppressWarnings("resource")
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8"));
        bw.append("<h2>" + x.toString() + "<h2>");
        bw.append(links.toString());
    }

Полный ответ для любого в будущем, который может захотеть что-то вроде этого:

package htmlMerge;

import java.io.*;
import org.jsoup.*;
import org.jsoup.nodes.*;
import org.jsoup.select.Elements;

public class mergeFiles {

public static void main(String[] args) throws IOException {

    try {
        String outFileName = System.getProperty("user.home") + "/Desktop/<Insert The Directory/name.html>";
        File outputFile = new File(outFileName);
        String desktopDir = System.getProperty("user.home") + "/Desktop/<Insert Dir name>";
        File dir = new File(desktopDir);
        File[] paths;
        //create a file filter that will only worry about .html files if your folder contains other extensions
        FilenameFilter fileNameFilter = new FilenameFilter() {
            public boolean accept(File dir, String name) {
                if (name.lastIndexOf('.') > 0) {
                    int lastIndex = name.lastIndexOf('.');
                    String extension = name.substring(lastIndex);
                    if (extension.equals(".html")) {
                        return true;
                    }
                }
                return false;
            }
        };
        paths = dir.listFiles(fileNameFilter);
        //use BufferedWriterd to create the initial .html file with a header
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(outputFile), "UTF-8"));
        bw.write("<h1>REPORT DATA</h1>");
        bw.close();
        /*Use file writer to append the .html file with additional .html files
        In this case, the .html files all contain One 'table', so this
        will append the tables to 'outputFile'.*/
        try {
            String file = outputFile.getAbsolutePath();
            FileWriter fw = new FileWriter(file, true);
            for (File x : paths) {
                Document doc = Jsoup.parse(x, "UTF-8");
                Elements links = doc.select("table");
                //adds the filename of the .html as a Level 2 heading
                fw.write("<h2>" + x.toString() + "</h2>");
                fw.write(links.toString());
            }
            fw.close();
        }catch (IOException ioe) {
            System.err.println(ioe.getMessage());
        } finally {
            bw.close();
        }
    } catch (IOException ioe) {
        System.out.println(ioe.getMessage());
    }
    System.out.println("\nMerge Completed Successfully");
  }
}

1 ответ

Решение

Вы должны закрыть BufferedWriter чтобы увидеть изменения.

Другие вопросы по тегам