使用 Java 编写 HTML 文件

2022-08-31 20:54:12

我希望我的 Java 应用程序在文件中编写 HTML 代码。现在,我正在使用java.io.BufferedWriter类对HTML标签进行硬编码。例如:

BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write("<html><head><title>New Page</title></head><body><p>This is Body</p></body></html>");
bw.close();

有没有更简单的方法来做到这一点,因为我必须创建表,而且变得非常不方便?


答案 1

如果你想自己做,而不使用任何外部库,一个干净的方法是创建一个包含所有静态内容的文件,例如:template.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>$title</title>
</head>
<body>$body
</body>
</html>

为任何动态内容放置一个类似标记,然后执行如下操作:$tag

File htmlTemplateFile = new File("path/template.html");
String htmlString = FileUtils.readFileToString(htmlTemplateFile);
String title = "New Page";
String body = "This is Body";
htmlString = htmlString.replace("$title", title);
htmlString = htmlString.replace("$body", body);
File newHtmlFile = new File("path/new.html");
FileUtils.writeStringToFile(newHtmlFile, htmlString);

注意:为了简单起见,我使用了 org.apache.commons.io.FileUtils


答案 2

几个月前,我遇到了同样的问题,我发现的每个库都为我的最终目标提供了太多的功能和复杂性。因此,我最终开发了自己的库 - HtmlFlow - 它提供了一个非常简单直观的API,使我能够以流畅的风格编写HTML。在这里检查:https://github.com/fmcarvalho/HtmlFlow(它还支持与HTML元素的动态绑定

下面是将对象的属性绑定到 HTML 元素的示例。考虑一个具有三个属性的 Java 类:和 a,然后我们可以通过以下方式为对象生成 HTML 文档:TaskTaskTitleDescriptionPriorityTask

import htmlflow.HtmlView;

import model.Priority;
import model.Task;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

public class App {

    private static HtmlView<Task> taskDetailsView(){
        HtmlView<Task> taskView = new HtmlView<>();
        taskView
                .head()
                .title("Task Details")
                .linkCss("https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css");
        taskView
                .body().classAttr("container")
                .heading(1, "Task Details")
                .hr()
                .div()
                .text("Title: ").text(Task::getTitle)
                .br()
                .text("Description: ").text(Task::getDescription)
                .br()
                .text("Priority: ").text(Task::getPriority);
        return taskView;
    }

    public static void main(String [] args) throws IOException{
        HtmlView<Task> taskView = taskDetailsView();
        Task task =  new Task("Special dinner", "Have dinner with someone!", Priority.Normal);

        try(PrintStream out = new PrintStream(new FileOutputStream("Task.html"))){
            taskView.setPrintStream(out).write(task);
            Desktop.getDesktop().browse(URI.create("Task.html"));
        }
    }
}