2017-04-08 102 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