Слияние файлов 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 ответ
Решение