2017-04-08 93 views
-2

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

我打印出content,一切都在那里,但FileWrter没有写任何从content到除HTML部分以外的文件。我在增强型for-loop中添加了System.out.println(k);content数组虽然不为空。

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"); 
      } 

一切都打印出来。如此怪异:(

+0

你是什么意思的“除了HTML部分”?你能告诉我们目前的文件内容是怎么样的吗?对于需要使用“\ n”的新行,请输入 – developer

+1

。 – Omore

+1

请提供[mcve]。你应该总是假设*你的代码有问题,而不是全世界数百万开发人员使用的代码。是的,“FileWriter”有可能存在一个错误,但这很可能是问题出在你的代码中。如果没有[mcve],我们将无法帮助您找到问题。 –

回答

0

您的代码IIS基本上是正确的,也许内容数组为空 的。。以下是在现代化的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的是使用默认字符集的老工具类,因此不便于携带,更好的指定字符集,以对应于HTML字符集。
  • 编码UTF-8允许使用完整的Unicode字符范围,如逗号(如引号)(通常用于MS Word)。 Java在内部也使用Unicode,所以它是一个很好的匹配。
  • HTML 5是最新的HTML版本,现在通常是一次性的。
  • 在一个地方输入错字/n
  • 将多个空格和换行符转换为单个空格。所以我加了<br>换行符。

正常情况下,人们会在方法头throws IOException上添加让调用者处理任何不规则性。

+0

我更新了帖子,内容不是空的,因为我试图打印出来。 – Nihaocode

+0

而输出确实是纯粹的ASCII,拉丁字母等?试一试我的代码以作比较。 –

4

您的代码正在被写入防止content唯一 - 空content它没有元素

+0

我更新了帖子,内容不为空,因为我试图将其打印出来。 – Nihaocode