2012-11-06 123 views
0

我寫了一個程序,使用霍夫曼編碼來獲取.txt文件並對其進行壓縮。該程序將壓縮後的代碼保存爲.hzip文件。代碼工作正常,直到我嘗試壓縮並保存包含新行字符的文件。這是我的代碼來保存文件:霍夫曼編碼文件保存

private void codeToFile() { 

    String code = ""; 
    char letter; 

    String fileName = this.encodeFileName.replace(".txt", ".hzip"); 

    FileOutputStream byteWriter = null; 
    FileInputStream reader = null; 
    try { 

     byteWriter = new FileOutputStream(fileName); 
     reader = new FileInputStream(this.encodeFileName); 

     while (reader.available() > 0) { 
      letter = (char) reader.read(); 

      code += hCode.get(letter); 

      if (code.length() > 7) { 
       int c = Integer.parseInt(code.substring(0, 8), 2) 
         + Byte.MIN_VALUE; 
       byteWriter.write((byte) c); 
       code = code.substring(8); 
      } 
     } 

     if (code.length() > 0 && code.length() <= 7) { 
      code += "0000000"; 
      int c = Integer.parseInt(code.substring(0, 8), 2) 
        + Byte.MIN_VALUE; 
      byteWriter.write((byte) c); 
     } 
     byteWriter.close(); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
    System.out.println("==============================="); 
    System.out.println("File Created: " + fileName); 

} 

我的錯誤一直在這條線出現:

int c = Integer.parseInt(code.substring(0, 8), 2) 
         + Byte.MIN_VALUE; 

我得到特定的錯誤是:異常在線程「AWT-EventQueue的-0」 java.lang.NumberFormatException:用於輸入字符串:「110001nu」。我不明白爲什麼一個新行字符引起這個問題。任何幫助將非常感激。

回答

0

可能是你hCode地圖不包含新行「信」的條目,所以hCode.get(letter)回報「空」,前兩個字母,其中你code.substring(0, 8)

得到