【问题标题】:java output html code to filejava输出html代码到文件
【发布时间】:2011-09-21 12:45:12
【问题描述】:

我有一段 html 代码,应该在 java 中输出为 .html 文件。预先编写的 html 代码是页面的标题和表格,我需要生成一些数据,并将其输出到同一个 .html 文件。有没有比逐行执行 prinln() 更简单的方法来打印 html 代码?谢谢

【问题讨论】:

  • 现在“html 块”是什么形式的?它在一个文件中吗?如果是这样,您可以打开文件并将其复制到标准输出。看看commons.apache.org/io/api-release/org/apache/commons/io/…
  • 您提到输出将被保存回同一个 html 文件...这是否意味着您有另一个源可以生成基本 HTML 文件供您使用?
  • html 块实际上是输出 HTML 文件的标题,是的,文件的其余部分是从另一个源文件(纯文本)生成的。我需要做的是将文件目录转换为 html,每个文件都有相同的标题。这就是为什么我想知道如何将一堆 html 代码打印到文件中

标签: java html printing


【解决方案1】:

您可以查看一些用于解析 HTML 代码的 Java 库。快速的谷歌搜索可以找到一些。读入 HTML,然后根据需要使用他们的查询来操作 DOM,然后将其吐出。 例如http://jsoup.org/

【讨论】:

  • 我误解了 OP 吗?因此,您有一些“预先编写”的 HTML 代码存储在文件或字符串或某处。将其读入 HTML 解析库。然后按照规定“生成一些数据”。根据需要注入数据。使用库输出结果。
【解决方案2】:

尝试使用模板引擎,例如MVEL2FreeMarker。两者都可以由 Web 框架之外的独立应用程序使用。前期会浪费时间,但从长远来看会节省时间。

【讨论】:

    【解决方案3】:

    JSP(Java 服务器页面)允许您编写 HTML 文件,这些文件中很容易嵌入一些 Java 代码。例如

    <html><head><title>Hi!</title></head><body>
    <% some java code here that outputs some stuff %>
    </body></html>
    

    虽然这需要您安装企业 Java 服务器。但如果这是在 Web 服务器上,那可能不是不合理的。

    如果你想用普通的 Java 来做,这取决于。我不完全理解您的意思是您将逐行输出的部分。你的意思是你要做类似的事情

    System.out.println("<html>");
    System.out.println("<head><title>Hi!</title></head>");
    System.out.println("<body>");
    // etc
    

    这样吗?如果这就是你的意思,那就不要那样做。您可以从模板文件中读取数据并一次输出所有数据。您可以将其读入多行文本字符串,您可以从模板中读取数据并将其直接输出到新文件。类似的东西

    while( (strInput = templateFileReader.readLine()) != null)
        newFileOutput.println(strInput);
    

    再说一次,我不确定你所说的那部分到底是什么意思。

    【讨论】:

    • 是的,你的第二个建议就是我的意思,除了 HTML 代码被硬编码到程序中。我需要做的是输出硬编码的 HTML(标题),然后根据命令行输入生成页面的其余部分。我写的其实是一个javas程序,给您造成的困扰,见谅
    • 当您说它被硬编码到程序中时,我假设它存储在字符串或其他东西中。所以你不能这样做:newFileOutput.println(header); 然后继续打印页面的其余部分吗?
    • 这就是我目前正在做的事情,但是自己输入每一行真的很慢......只是想知道是否有更快的方法
    【解决方案4】:

    HTML 只是一种标记文本的方式,因此要编写 HTML 文件,您只需将 HTML 作为文本写入扩展名为 .html 的文件。

    有很多教程可以用于读取和写入文件,以及从目录中获取文件列表。 (Google 'java read file', 'java write file', 'java list directory' - 这基本上是你需要的一切。)重要的是使用 BufferedReader/BufferedWriter 将文本拉入和推送到文件中并实现将 HTML 写入文件并不涉及特定的代码科学。

    我会重申; HTML 只不过是&lt;b&gt;text with tags&lt;/b&gt;

    这是一个非常粗略的示例,它将两个文件输出到一个文件中,并将它们包装在 &lt;html&gt;&lt;/html&gt; 标记中。

    BufferedReader getReaderForFile(filename) {
        FileInputStream in = new FileInputStream(filename);
        return new BufferedReader(new InputStreamReader(in));
    }
    
    public void main(String[] args) {
        // Open a file
        BufferedReader myheader = getReaderForFile("myheader.txt");
        BufferedReader contents = getReaderForFile("contentfile.txt");
    
        FileWriter fstream = new FileWriter("mypage.html");
        BufferedWriter out = new BufferedWriter(fstream);
    
        out.write("<html>");
        out.newLine();
    
        for (String line = myheader.readLine(); line!=null; line = myheader.readLine()) {
            out.write(line);
            out.newLine(); // readLine() strips 'carriage return' characters
        }
    
        for (String line = contents.readLine(); line!=null; line = contents.readLine()) {
            out.write(line);
            out.newLine(); // readLine() strips 'carriage return' characters
        }
    
        out.write("</html>");
    }
    

    【讨论】:

      【解决方案5】:

      要构建一个简单的 HTML 文本文件,您不必逐行读取输入文件。

        File theFile = new File("file.html");
        byte[] content = new byte[(int) theFile.length()];
      

      您可以使用“RandomAccessFile.readFully”将文件完全作为字节数组读取:

        // Read file function:
        RandomAccessFile file = null;
        try {
          file = new RandomAccessFile(theFile, "r");
          file.readFully(content);
        } finally {
          if(file != null) {
            file.close();
          }
        }
      

      对文本内容进行修改:

        String text = new String(content);
        text = text.replace("<!-- placeholder -->", "generated data");
        content = text.getBytes();
      

      写作也很简单:

        // Write file content:
        RandomAccessFile file = null;
        try {
          file = new RandomAccessFile(theFile, "rw");
          file.write(content);
        } finally {
          if(file != null) {
            file.close();
          }
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 2016-01-08
        • 1970-01-01
        相关资源
        最近更新 更多