在JAVA中生成输出

时间:2011-04-21 13:43:14

标签: java html

我们可以使用java生成.html文档吗?通常我们在cmd提示符中输出我们运行java程序的输出。我想以.html或.doc格式生成输出是他们在java中的一种方式吗?

11 个答案:

答案 0 :(得分:3)

适用于HTML

只需将数据写入.html文件(它们只是扩展名为.html的文本文件),使用原始文件操作

例如:

    StringBuilder sb = new StringBuilder();
    sb.append("<html>");
    sb.append("<head>");
    sb.append("<title>Title Of the page");
    sb.append("</title>");
    sb.append("</head>");
    sb.append("<body> <b>Hello World</b>");
    sb.append("</body>");
    sb.append("</html>");
    FileWriter fstream = new FileWriter("MyHtml.html");
    BufferedWriter out = new BufferedWriter(fstream);
    out.write(sb.toString());
    out.close();

对于word文档

This thread answers it

答案 1 :(得分:2)

HTML只是带有一堆标签的纯文本,正如其他人已经回答的那样。我的建议是,如果你做的事情比输出基本的HTML片段更复杂,那就是使用模板引擎,例如StringTemplate

StringTemplate允许您创建一个如下所示的文本文件(实际上是一个HTML文件):

<html>
    <head>
       <title>Example</title>
    </head>
    <body>
       <p>Hello $name$</p>
   </body>
</html>

这是你的模板。然后在Java代码中,您将填写$name$占位符,然后输出生成的HTML页面:

StringTemplate page = group.getInstanceOf("page");
page.setAttribute("name", "World");
System.out.println(page.toString());

这将在您的屏幕上打印出以下结果:

<html>
    <head>
       <title>Example</title>
    </head>
    <body>
       <p>Hello World</p>
   </body>
</html>

当然,上面的示例Java代码不是完整的代码,但它说明了如何使用仍然有效的HTML模板(使其更容易在HTML编辑器中编辑),同时保持Java代码简单(通过避免在System.out.println语句中包含大量HTML标记。

至于MS Office .doc格式,这个更复杂,您可以查看Apache POI

答案 2 :(得分:1)

输出只是输出。它意味着什么以及如何使用它完全取决于你。

如果您System.out.println('<p>Hello world!</p>');刚刚制作了HTML。

.doc格式显然有点棘手,因为放入标签并不是一件简单的事情,但是有一些库可以完成工作。谷歌可以推荐不止一些。

答案 3 :(得分:1)

HTML只是纯文本。只需将HTML代码写入文件或标准输出即可。

Word文件更复杂。看一下像Apache POI这样的图书馆。

答案 4 :(得分:1)

我已经感觉到过去的需求,我最终开发了一个java库 - HtmlFlow(部署在Maven Central Repository) - 它提供了一个简单的API来以流畅的方式编写HTML。请在此处查看:https://github.com/fmcarvalho/HtmlFlow

您可以在有或没有数据绑定的情况下使用HtmlFlow,但在此我提供了将Task对象的属性绑定到HTML元素的示例。考虑具有三个属性的Task Java类:TitleDescriptionPriority然后我们可以为以下Task对象生成HTML文档方式:

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);
            Runtime.getRuntime().exec("explorer Task.html");
        }
    }
}

答案 5 :(得分:0)

不确定。

一般方法:在内存中创建文档,即在StringBuilder中创建文档,并将该构建器的内容写入文件。

StringBuilder htmlBuilder = new StringBuilder();
htmlBuilder.append("<html><body>");
htmlBuilder.append("Hello world!");
htmlBuilder.append("</body></html>\n");

FileWriter writer = new FileWriter(System.getProperty("user.home") + "/hello.html");
writer.write(htmlBuilder.toString());
writer.close();

将它放在main方法中,执行,你会在你的主目录中找到一个html文件

答案 6 :(得分:0)

我不知道你为什么这么说:

  

通常我们会在cmd提示符中获得输出   我们运行java程序。

我今天一直在运行一些java程序,但是他们没有对cmd提示做任何事情。如果你使用system.out.println,是的,但大多数高级程序都有更多的通信。像界面一样:))

您要做的是查看文件处理程序。打开(或创建)文件,将内容写入该文件并关闭它。然后你有一个文件。您可以将任何想要的内容写入该文件,因此显然也可以使其成为HTML或文档。在文件编写

上很容易找到howtos

答案 7 :(得分:0)

检查一下:

try {
    BufferedWriter out = new BufferedWriter(new FileWriter("outfilename.html"));
    out.write("aString"); //Here you pass your output
    out.close();
} catch (IOException e) {
}

您将需要导入BufferedWriter,FileWriter和IOException,它们位于java.io下

&#34; aString&#34;应该是一个存储html代码或doc xml

的String变量

答案 8 :(得分:0)

要生成HTML文档,您应该写入文件。由于HTML是文本格式,因此您可以写入文本文件。这样做需要这些类

java.io.File - 这表示文件系统中的位置

java.io.FileWriter - 这建立了从程序到文件的连接

java.io.BufferedWriter - 这可以实现文本的缓冲写入,速度更快

java.io.IOException - 如果写入有问题,则会抛出其中一个恶意内容 文件。它是一个已检查(与运行时相对)的异常,您必须处理它。

Head First Java书籍包含对这些类的非常好的介绍,并向您展示如何使用它们。要使用这些,您必须首先了解异常处理。这也包含在Head First Java中。

我希望这能让你开始。

答案 9 :(得分:0)

如果您有一些类似文档的数据(结构化),我建议使用DOM(文档对象模型),然后将其转换为所需的格式(xml,html,doc,等等)。但是如果你只有一些应用程序输出,你可以用html轻松地包装它。不一定在java中 - 您还可以将程序的输出存储在纯文本文件中,稍后将其转换为html(添加body,paragprahs,headers和其他HTML元素)。

答案 10 :(得分:0)

创建纯HTML的非常简单可靠的方法可能基于SAX处理程序和默认的XSLT转换器,后者具有HTML输出的内在功能:

String encoding = "UTF-8";
FileOutputStream fos = new FileOutputStream("myfile.html");
OutputStreamWriter writer = new OutputStreamWriter(fos, encoding);
StreamResult streamResult = new StreamResult(writer);

SAXTransformerFactory saxFactory =
    (SAXTransformerFactory) TransformerFactory.newInstance();
TransformerHandler tHandler = saxFactory.newTransformerHandler();
tHandler.setResult(streamResult);

Transformer transformer = tHandler.getTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "html");
transformer.setOutputProperty(OutputKeys.ENCODING, encoding);
transformer.setOutputProperty(OutputKeys.INDENT, "yes");

writer.write("<!DOCTYPE html>\n");
writer.flush();
tHandler.startDocument();
    tHandler.startElement("", "", "html", new AttributesImpl());
        tHandler.startElement("", "", "head", new AttributesImpl());
            tHandler.startElement("", "", "title", new AttributesImpl());
                tHandler.characters("Hello".toCharArray(), 0, 5);
            tHandler.endElement("", "", "title");
        tHandler.endElement("", "", "head");
        tHandler.startElement("", "", "body", new AttributesImpl());
            tHandler.startElement("", "", "p", new AttributesImpl());
                tHandler.characters("5 > 3".toCharArray(), 0, 5); // note '>' character
            tHandler.endElement("", "", "p");
        tHandler.endElement("", "", "body");
    tHandler.endElement("", "", "html");
tHandler.endDocument();
writer.close();

请注意,XSLT转换器将使您免除转义>等特殊字符的负担,因为它需要自己处理它。

很容易将startElement()characters()之类的SAX方法包装成更方便的东西......

值得注意的是,在没有模板和内存中的文档分配(例如DOM)的情况下处理可以让您在结果文档大小方面获得更多自由......