• 大小: 11KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: Java
  • 标签: java  

资源简介

这是学校数据结构与算法设计课程的PJ,旨在实现类似zip软件的压缩与解压功能。我在几乎有空就在写代码的情况下两周完成了这个项目。 目前网上能够搜索到的资料对于单个文件和文本文件的压缩与解压较多,而对文件夹与大文件的压缩与解压较少。所以想在这里把自己的一些想法和思路写下来,供大家交流与参考。因为自己目前正在读大二,这也是自己写的第一篇CSDN博客,之前只学过C与C++,java是纯自学的,并且这也是用java写的第一个PJ,所以写得比较烂,希望有前辈能够指点指点!

资源截图

代码片段和文件信息

package HRJ;

import java.io.*;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.ArrayList;

public class Assistance {
    //得到压缩文件的文件名
    public static String gettargetname(String filename) {
        File file = new File(filename);
        String targetname = ““;
        if (file.isFile())
            targetname = filename.substring(0 filename.lastIndexOf(“.“)) + “.HRJ“;
        else if (file.isDirectory())
            targetname = filename + “.HRJ“;

        return targetname;

    }

    //得到文件中的所有文件
    public static ArrayList getAllFilePaths(File filePath ArrayList filePaths) {
        File[] files = filePath.listFiles();
        if (files == null) {
            return filePaths;
        }
        for (File f : files) {
            if (f.isDirectory()) {
                filePaths.add(f.getPath());
                getAllFilePaths(f filePaths);
            } else {
                filePaths.add(f.getPath());
            }
        }
        return filePaths;
    }




    //得到字符频率表
    public static void readFileByBytes(String fileName ArrayList array) {

        Unit u;
        for (int i = 0; i < 256; i++) {
            u = new Unit((char) i 0);
            array.add(u);
        }
        File file = new File(fileName);
        if (file.isFile()) {
            try {
                FileInputStream in = new FileInputStream(file);
                // 一次读一个字节
                byte[] B = new byte[102400000];
                //遍历,得到元素及其出现频率
                int tempbyte;
                int leng i;
                while ((leng = in.read(B)) != -1) {
                    for (i = 0; i < leng; i++) {
                        tempbyte = 0 | (B[i] & 0x000000ff);
                        array.get(tempbyte).quantity++;
                    }
                }


                in.close();


            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return;
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }
        } else if (file.isDirectory()) {
            ArrayList fileArrayList = new ArrayList<>();
            Assistance.getAllFilePaths(new File(fileName) fileArrayList);
            for (String f : fileArrayList) {

                file = new File(f);
                if (file.isFile()) {
                    try {
                        FileInputStream in = new FileInputStream(file);
                        // 一次读一个字节
                        byte[] B = new byte[102400000];
                        //遍历,得到元素及其出现频率
                        int tempbyte;
                        int leng i;
                        while ((leng = in.read(B)) != -1) {
                            for (i = 0; i < leng; i++) {
                                tempbyte = 0 | (B[i] & 0x000000ff);
                                array.get(tempbyte).quantity++;
                            }
                        }

      

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        3498  2018-11-08 10:07  Assistance.java
     文件        1762  2018-10-29 19:45  Code.java
     文件        1966  2018-10-29 19:45  Haffmantree.java
     文件       26447  2018-11-08 10:11  Handle.java
     文件        2777  2018-11-08 09:57  HRJ.java
     文件         106  2018-11-03 22:41  Main.java
     文件         295  2018-10-29 16:47  Unit.java
     文件        5814  2018-11-03 22:41  寮€鍙戞枃妗?

评论

共有 条评论