压缩解压总结

压缩

1、扫描需要压缩的文件进行读取

注意

               File file = file2;
                Reader reader = null;
                try {
                    reader = new InputStreamReader(new FileInputStream(file));
                    int tempchar;
                    while ((tempchar = reader.read()) != -1) {
                        // 对于windows下,\r\n这两个字符在一起时,表示一个换行。
                        // 但如果这两个字符分开显示时,会换两次行。
                        // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。

                        if (((char) tempchar) != '\r') {
                            allchartimes[tempchar]++;
                        }
                    }
                    reader.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }

2、里用哈夫曼树对于读取的文件进行翻译成01串

               HafumanNode root=new HafumanNode(null);
                while(list.size()!=1){
                    //构造哈夫曼树
                    HafumanNode leftnode=list.poll();
                    HafumanNode rightnode=list.poll();
                    //生成当前情况下最小的父节点
                    int newtimes=leftnode.getTimes()+rightnode.getTimes();
                    HafumanNode newnode=new HafumanNode(newtimes);
                    newnode.setLeftnode(leftnode);
                    newnode.setRightnode(rightnode);
                    //把父节点添加到当前队列中
                    list.add(newnode);
                    root=newnode;

                  }

3、把01串转换成16进制,位数不足8的倍数需要补零,最后2位表示补零的个数

                int k=0;
                //把不足八位的个数 写入
                while((mima.length()%8)!=0){
                    mima.append("0");
                    k++;
                }
                String sum=Integer.toBinaryString(k);
                while(sum.length()<8)
                    sum="0"+sum;

4、把翻译的字典以及翻译过后的16进制的数据保存到一个新的文件中

                   while(mima.length()!=0){
                    String substring=mima.substring(0,8);
                    int parseInt = Integer.parseInt(substring, 2);
                    String s=Integer.toHexString(parseInt);
                    //System.out.println(Integer.toHexString(parseInt));
                    if(s.length()%2!=0)
                        s="0"+s;
                    bw.write(s);
                    mima.delete(0, 8);
                }

压缩完成

解压

1、扫描需要解压的文件

2、按照压缩文件里面保存的字典进行翻译

3、翻译过后的结果保存到一个新的文件中

解压完成


添加界面

1、创建一个界面,添加压缩、解压两个按钮

2、对于两个按钮添加监听

  JFileChooser 文件选择对话框

  按下按钮响应对应的事件

            if(e.getSource()==ys){
                try {
                    yasuo(chooser.getSelectedFile());
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                //System.out.print("------------------------");
            }
           if(e.getSource()==jy){
                try {
                    jieya(chooser.getSelectedFile());
                } catch (IOException e1) {
               

完整的一个压缩解压工具完成



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值