采用Huffman编码进行文本文件压缩和解压缩,用Java代码实现
时间: 2023-02-21 11:55:37 浏览: 61
下面是用Java代码实现Huffman编码压缩和解压缩的示例:
```
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
public class HuffmanCode {
static Map<Character, String> huffmanCode = new HashMap<>();
static StringBuilder stringBuilder = new StringBuilder();
// 压缩文件
public static void compressFile(String srcFile, String dstFile) throws Exception {
FileInputStream fileInputStream = new FileInputStream(srcFile);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
// 读入文件内容
StringBuilder sb = new StringBuilder();
while (bufferedReader.ready()) {
sb.append(bufferedReader.readLine());
}
bufferedReader.close();
fileInputStream.close();
String content = sb.toString();
// 生成Huffman树,并得到Huffman编码
generateHuffmanTree(content);
// 将文件内容转换为Huffman编码
String huffmanCodeContent = toHuffmanCodeContent(content);
// 写入压缩文件
FileOutputStream fileOutputStream = new FileOutputStream(dstFile);
DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
for (int i = 0; i < huffmanCodeContent.length(); i += 8) {
int x = Integer.parseInt(huffmanCodeContent.substring(i, i + 8), 2);
dataOutputStream.writeByte(x);
}
dataOutputStream.close();
fileOutputStream.close();
}
// 解压缩文件
public static void decompressFile(String srcFile, String dstFile) throws Exception {
FileInputStream fileInputStream = new FileInputStream(srcFile);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
// 读入文件内容
StringBuilder sb = new StringBuilder();
while (bufferedReader.ready()) {
int x = bufferedReader.read();
String str = Integer.toBinaryString(x);
while (str.length() < 8) {
str = "0" + str;
}
sb.append(str);
}
bufferedReader.close();
fileInputStream.close();
String huffmanCodeContent = sb.toString();
// 将