如何在java中输出格式化的html

时间:2010-05-18 11:56:59

标签: java html parsing gwt indentation

我正在读这样的html文件:

try {
    BufferedReader bufferReader = new BufferedReader(new FileReader(path));
    String content;
    while((content = bufferReader.readLine()) != null) {
        result += content;
    }
    bufferReader.close();

} catch (Exception e) {
    return e.getMessage();
}

我想在GWT textArea中显示它,我将其作为String给出。但是字符串会丢失缩进并作为单行文本出现。有没有办法正确显示格式(带缩进)?

4 个答案:

答案 0 :(得分:5)

这可能是因为readLine()砍掉了行尾字符。每行再次添加它们。

除此之外,在循环中使用StringBuilder代替+=使用String

try {
    BufferedReader bufferReader = new BufferedReader(new FileReader(path));
    StringBuilder sb = new StringBuilder();
    String content;
    while ((content = bufferReader.readLine()) != null) {
        sb.append(content);
        sb.append('\n');   // Add line separator
    }
    bufferReader.close();
} catch (Exception e) {
    return e.getMessage();
}

String result = sb.toString();

答案 1 :(得分:1)

好吧,假设你的textArea理解HTML(我不知道具体是GWT),为什么不用<pre>作为前缀,然后追加</pre>

您可能仍需要将所有HTML特殊字符(例如&&amp;<转义为&lt;

答案 2 :(得分:1)

使用FileReader可能更有效 - 没有理由你必须逐行阅读文本。像Jesper建议的那样,使用StringBuilder构建String更有效。此外,使用FileReader,您不必手动附加任何换行符:

StringBuilder sb = new StringBuilder();
FileReader in = null;
try {
    in = new FileReader(path);
    int read;
    char buf[] = new char[4096];
    while ((read = in.read(buf)) != -1) {
        sb.append(buf, 0, read);
    }
} catch (Exception e) {
    return e.getMessage();
} finally {
    in.close();
}

String result = sb.toString();

答案 3 :(得分:0)

如果您的HTML恰好是XHTML,那么您可以尝试将其放入XML解析器,例如jdom或dom4j,它通常具有一些“漂亮打印”选项。