Java打成压缩包的方法汇总

2024-04-30 1623阅读

文章目录

  • 1.将指定目录下的文件打包成 .zip
  • 2.将指定目录下的文件打包成 .tar.gz
  • 3.将指定目录下的文件打包成 .tar
  • 4.将指定目录下的文件打包成 .rar
  • 5.生成若干个txt并打包到zip中

    1.将指定目录下的文件打包成 .zip

    代码示例:

    Java打成压缩包的方法汇总
    (图片来源网络,侵删)
    import java.io.*;
    import java.util.zip.*;
    public class ZipFiles {
        public static void main(String[] args) {
            // 要压缩的文件或文件夹
            String sourceFile = "path/to/your/source/file_or_folder";
            // 压缩后的ZIP文件名
            String zipFileName = "output.zip";
            // 创建一个输出流将数据写入ZIP文件
            try (FileOutputStream fos = new FileOutputStream(zipFileName);
                 ZipOutputStream zos = new ZipOutputStream(fos)) {
                // 调用递归方法压缩文件或文件夹
                addToZipFile(sourceFile, sourceFile, zos);
                System.out.println("文件已成功打包成 " + zipFileName);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        private static void addToZipFile(String path, String sourceFile, ZipOutputStream zos) throws IOException {
            File file = new File(sourceFile);
            // 如果是文件夹,则获取其内容并递归调用此方法
            if (file.isDirectory()) {
                String[] fileList = file.list();
                if (fileList != null) {
                    for (String fileName : fileList) {
                        addToZipFile(path, sourceFile + File.separator + fileName, zos);
                    }
                }
                return;
            }
            // 如果是文件,则将其添加到ZIP文件中
            try (FileInputStream fis = new FileInputStream(sourceFile)) {
                String entryName = sourceFile.substring(path.length() + 1); // 获取ZIP中的条目名称
                ZipEntry zipEntry = new ZipEntry(entryName);
                zos.putNextEntry(zipEntry);
                byte[] bytes = new byte[1024];
                int length;
                while ((length = fis.read(bytes)) >= 0) {
                    zos.write(bytes, 0, length);
                }
            }
        }
    }
    

    将 path/to/your/source/file_or_folder 替换为要打包的文件或文件夹的路径,然后运行该代码。它将创建一个名为 output.zip 的ZIP文件,其中包含指定路径下的文件或文件夹。

    2.将指定目录下的文件打包成 .tar.gz

    可以使用 Java 中的 java.util.zip 包来创建 .tar.gz 文件。尽管 Java 的标准库没有直接提供对 .tar 格式的支持,但你可以使用 TarArchiveOutputStream 以及 GzipCompressorOutputStream 来创建 tar.gz 归档文件。以下是一个示例:

    import org.apache.commons.compress.archivers.tar.*;
    import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;
    import java.io.*;
    public class TarGzFiles {
        public static void main(String[] args) {
            // 要压缩的文件或文件夹
            String sourceFile = "path/to/your/source/file_or_folder";
            // 压缩后的tar.gz文件名
            String tarGzFileName = "output.tar.gz";
            try {
                FileOutputStream fos = new FileOutputStream(tarGzFileName);
                BufferedOutputStream bos = new BufferedOutputStream(fos);
                GzipCompressorOutputStream gzos = new GzipCompressorOutputStream(bos);
                TarArchiveOutputStream tarArchive = new TarArchiveOutputStream(gzos);
                File file = new File(sourceFile);
                addToTarArchive(file, tarArchive);
                tarArchive.finish();
                tarArchive.close();
                System.out.println("文件已成功打包成 " + tarGzFileName);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        private static void addToTarArchive(File file, TarArchiveOutputStream tarArchive) throws IOException {
            String entryName = file.getName();
            TarArchiveEntry tarEntry = new TarArchiveEntry(file, entryName);
            tarArchive.putArchiveEntry(tarEntry);
            if (file.isFile()) {
                try (FileInputStream fis = new FileInputStream(file)) {
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = fis.read(buffer)) != -1) {
                        tarArchive.write(buffer, 0, len);
                    }
                    tarArchive.closeArchiveEntry();
                }
            } else if (file.isDirectory()) {
                tarArchive.closeArchiveEntry();
                File[] children = file.listFiles();
                if (children != null) {
                    for (File child : children) {
                        addToTarArchive(child, tarArchive);
                    }
                }
            }
        }
    }
    

    在此示例中,使用了 Apache Commons Compress 库,你可以在 Maven =添加以下依赖:

    Maven:

        org.apache.commons
        commons-compress
        1.21 
    
    

    确保将 path/to/your/source/file_or_folder 替换为要打包的文件或文件夹的实际路径,然后运行代码以创建 output.tar.gz 文件。

    3.将指定目录下的文件打包成 .tar

    Java的标准库中并没有直接支持创建.tar格式文件的类,但你可以使用Apache Commons Compress库来完成这个任务。下面是一个示例代码:

    首先,确保你在项目中包含了Apache Commons Compress库。如果使用Maven,可以在pom.xml文件中添加以下依赖项:

        org.apache.commons
        commons-compress
        1.21 
    
    

    然后,使用以下代码将文件打包成.tar文件:

    import org.apache.commons.compress.archivers.tar.*;
    import org.apache.commons.compress.utils.IOUtils;
    import java.io.*;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    public class TarFiles {
        public static void main(String[] args) {
            // 要打包的文件或文件夹
            String sourceFile = "path/to/your/source/file_or_folder";
            // 打包后的tar文件名
            String tarFileName = "output.tar";
            try {
                FileOutputStream fos = new FileOutputStream(tarFileName);
                BufferedOutputStream bos = new BufferedOutputStream(fos);
                TarArchiveOutputStream tarArchive = new TarArchiveOutputStream(bos);
                addToTarArchive(sourceFile, tarArchive);
                tarArchive.finish();
                tarArchive.close();
                System.out.println("文件已成功打包成 " + tarFileName);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        private static void addToTarArchive(String filePath, TarArchiveOutputStream tarArchive) throws IOException {
            Path sourcePath = Paths.get(filePath);
            String baseDir = sourcePath.getFileName().toString();
            Files.walk(sourcePath)
                    .filter(path -> !Files.isDirectory(path))
                    .forEach(path -> {
                        try {
                            String entryName = baseDir + File.separator + sourcePath.relativize(path).toString();
                            TarArchiveEntry tarEntry = new TarArchiveEntry(path.toFile(), entryName);
                            tarArchive.putArchiveEntry(tarEntry);
                            FileInputStream fis = new FileInputStream(path.toFile());
                            IOUtils.copy(fis, tarArchive);
                            fis.close();
                            tarArchive.closeArchiveEntry();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    });
        }
    }
    

    在这个示例中,我们使用了Apache Commons Compress库来创建.tar文件。确保将path/to/your/source/file_or_folder替换为你要打包的实际文件或文件夹的路径,并运行代码来创建output.tar文件。

    4.将指定目录下的文件打包成 .rar

    在Java中,压缩成RAR格式的操作稍微有些复杂,因为RAR格式是一种专有格式,并没有Java标准库提供直接支持。为了压缩文件为RAR格式,你可以使用第三方库,比如通过调用WinRAR或其他命令行工具来实现。

    一种方法是使用Java的ProcessBuilder来运行命令行来执行WinRAR或其他RAR压缩工具的命令。以下是一个简单的示例,假设你已经安装了WinRAR并将其路径添加到了系统的环境变量中:

    import java.io.*;
    public class RARFiles {
        public static void main(String[] args) {
            // 要压缩的文件或文件夹
            String sourceFile = "path/to/your/source/file_or_folder";
            // 压缩后的RAR文件名
            String rarFileName = "output.rar";
            try {
                // 构建命令行
                String[] command = {"cmd", "/c", "rar", "a", "-r", rarFileName, sourceFile};
                // 创建进程并执行命令
                ProcessBuilder processBuilder = new ProcessBuilder(command);
                Process process = processBuilder.start();
                // 读取进程输出(可选)
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
                // 等待进程执行结束
                int exitCode = process.waitFor();
                if (exitCode == 0) {
                    System.out.println("文件已成功打包成 " + rarFileName);
                } else {
                    System.out.println("打包过程中出现错误");
                }
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    

    请替换 path/to/your/source/file_or_folder 为你要压缩的文件或文件夹的路径,并确保系统中已经正确安装和配置了WinRAR。

    记住,这种方法需要系统中安装有WinRAR并且路径被正确添加到系统的环境变量中,且这个示例中的代码并没有对WinRAR命令返回的错误进行详细处理。

    5.生成若干个txt并打包到zip中

    代码示例:

    import java.io.*;
    import java.util.zip.*;
    public class GenerateTxtFilesAndZip {
        public static void main(String[] args) {
            String basePath = "path/to/your/directory"; // 更换为你想要保存文件的文件夹路径
            int fileCount = 10; // 要生成的文件数量
            try {
                // 创建文件夹(如果不存在)
                File directory = new File(basePath);
                if (!directory.exists()) {
                    directory.mkdirs();
                }
                // 生成txt文件并写入内容
                for (int i = 1; i 
                    String fileName = "file" + i + ".txt";
                    String filePath = basePath + File.separator + fileName;
                    String fileContent = "This is the content of " + fileName;
                    try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
                        writer.write(fileContent);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                // 打包成zip文件
                String zipFileName = "output.zip";
                byte[] buffer = new byte[1024];
                FileOutputStream fos = new FileOutputStream(zipFileName);
                ZipOutputStream zos = new ZipOutputStream(fos);
                File dir = new File(basePath);
                File[] files = dir.listFiles();
                if (files != null) {
                    for (File file : files) {
                        if (file.getName().endsWith(".txt")) {
                            FileInputStream fis = new FileInputStream(file);
                            zos.putNextEntry(new ZipEntry(file.getName()));
                            int length;
                            while ((length = fis.read(buffer))  0) {
                                zos.write(buffer, 0, length);
                            }
                            zos.closeEntry();
                            fis.close();
                        }
                    }
                }
                zos.close();
                System.out.println("文件已成功打包成 " + zipFileName);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    请替换path/to/your/directory为你想要保存生成文件的实际文件夹路径。这段代码会在指定路径下生成10个.txt文件,并将它们打包成一个名为output.zip的ZIP文件。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]