我在使用Hffman algorthim壓縮excel文件時遇到了一些問題。問題是我的代碼似乎與.txt文件一起工作,但是當我嘗試壓縮.xlsx或更早版本的Excel時,會發生錯誤。壓縮Excel文件的問題,JAVA
首先,我讀我的文件是這樣的:
File file = new File("fileName.xlsx");
byte[] dataOfFile = new byte[(int) file.length()];
DataInputStream dis = new DataInputStream(new FileInputStream(file));
dis.readFully(dataOfFile);
dis.close();
要對此進行檢查(如果一切OK),我用這個代碼:
String entireFileText = new String(dataOfFile, "UTF-8");
for(int i=0;i<dataOfFile.length;i++)
{
System.out.print(dataOfFile[i]);
}
通過這樣做來一個.txt文件我得到這樣的(這似乎是OK):
「7210110810811132119111114108100331310721111193297114101321211111173」
但是,當我使用這個對.xlsx文件我得到這個,我覺得連字符使得可能在壓縮後會出現錯誤:
「8075342006080003301165490-90122100-1245001908291671111101161011101169584121112101115934612010910832-944240-96020000000000000」 ......等等
無論如何,通過使用一個字符串一個可以映射到一個HashMap,其中我計算每個字符的頻率。我有一個HashMap:
public static HashMap map;
public static boolean countHowOftenACharacterAppear(String s1) {
String s = s1;
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
Integer val = map.get(new Character(c));
if(val != null){
map.put(c, new Integer(val + 1));
}
else{
map.put(c,1);
}
}
return true;
}
當我壓縮我的字符串我用:
public static String compress(String s) {
String c = new String();
for(int i = 0; i < s.length(); i++)
c = c + fromCharacterToCode.get(s.charAt(i));
return c;
}
fromCharactertoCode是類型的另一個HashMap中: 公共靜態HashMap中fromCharacterToCode;
(我穿越過我的表我已經建立了Dont't覺得這是問題)
總之,使用.txt文件從這個結果是:
「01000110110111011011110001101110011011000001000000000」 ......(完美)
從.xlsx文件:
「10101110110001110null0010000null0011000nullnullnull10110000null00001101011111」 ......
我真的不明白爲什麼我會在.xlsx文件中獲取nullpointers。如果我能在這裏得到一些幫助來解決這個問題,我會非常高興。非常感謝!!