FileWriter有什么问题吗?

时间:2017-04-08 19:56:14

标签: java io

我不知道FileWriter发生了什么,因为它只写出了HTML部分,但没有写出String数组contentcontent存储了很多长String个。是因为Java的垃圾收集器吗?

我打印出content并且一切都在那里,但是FileWrter除了HTML部分之外没有从content向该文件写任何内容。我在增强的for循环中添加了System.out.println(k);content数组不是null。

public void writeHtml(String[] content) {
    File file = new File("final.html");
    try {
        try (FileWriter Fw = new FileWriter(file)) {
            Fw.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"
                    + "<html>\n"
                    + "<head>\n"
                    + "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=us-ascii\">\n"
                    + "<title>" + fileName +" for  The Delinquent</title>\n"
                    + "<style type = \"text/css\">\n"
                    + "body {font-family: \"Times New Roman, serif\"; font-size: 14 or 18; text-align: justify;};\n"
                    + "p { margin-left: 1%; margin-right: 1%; }\n"
                    + "</style>\n"
                    + "</head><body>");
            for (String k : content) {
                Fw.write(k+"\n");
            }
            Fw.write("</body></html>");
        }

    } catch (Exception e) {
        e.printStackTrack();
    }
}

运行程序后final.html的样子如何:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<title>the_delinquent.txt for  The Delinquent</title>
<style type = "text/css">
body {font-family: "Times New Roman, serif"; font-size: 14 or 18; text-
align: justify;};
p { margin-left: 1%; margin-right: 1%; }
</style>
</head><body>
</body></html>

我知道内容不是空的,因为我这样做了:

 for (String k: content) {
                System.out.println(k + "\n");
                bw.write(k + "\n");
            }

打印出来的一切。太奇怪了:(

2 个答案:

答案 0 :(得分:4)

你的代码正在运作。唯一阻止content被写入的事情 - 空content。它没有元素。

答案 1 :(得分:0)

你的代码基本上是正确的,也许内容数组是空的。 以下是现代化的java风格。

public void writeHtml(String[] content) {
    Path file = Paths.get("final.html");
    try (BufferedWriter fw = Files.newBufferedWriter(file, StandardCharsets.UTF_8)) {
        fw.write("<!DOCTYPE html>\n"
                + "<html>\n"
                + "<head>\n"
                + "<meta charset=UTF-8\">\n"
                + "<title>" + fileName + " for  The Delinquent</title>\n"
                + "<style type = \"text/css\">\n"
                + "body {font-family: \"Times New Roman, serif\";"
                + " font-size: 14 or 18; text-align: justify;};\n"
                + "p { margin-left: 1%; margin-right: 1%; }\n"
                + "</style>\n"
                + "</head><body>");
        fw.write("Content has: " + content.length + " strings.<br>\n");
        for (String k : content) {
            fw.write("* " + k + "<br>\n");
        }
        fw.write("</body></html>\n");
    } catch (IOException e) {
        System.out.println("Error " + e.getMessage());
    }
}
  • FileWriter是一个使用默认字符集的旧实用程序类,因此不可移植。最好指定charset以对应HTML中的charset。
  • 编码UTF-8允许使用完整的Unicode字符范围,例如逗号(如MS Word)。 Java内部也使用Unicode,所以它很合适。
  • HTML 5是最新的HTML版本,现在通常是一次性的。
  • 在一个地方输入错误/n
  • 多个空格和换行符将转换为单个空格。所以我添加了<br>换行。

通常会添加方法标题throws IOException以让调用者处理任何异常情况。