我写了一个程序,它使用霍夫曼编码来获取.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 :(得分:0)
您的hCode
地图可能不包含新行'字母'的条目,因此hCode.get(letter)
会返回'null',前两个字母是code.substring(0, 8)