您现在的位置是:首页 > 经典句子

Java打成压缩包的方法汇总

作者:往北时间:2024-05-03 09:16:43分类:经典句子

简介  文章浏览阅读2.2k次,点赞16次,收藏31次。Java打成压缩包的方法汇总_java 压缩文件夹

点击全文阅读

文章目录

1.将指定目录下的文件打包成 .zip2.将指定目录下的文件打包成 .tar.gz3.将指定目录下的文件打包成 .tar4.将指定目录下的文件打包成 .rar5.生成若干个txt并打包到zip中

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

代码示例:

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:

<dependency>    <groupId>org.apache.commons</groupId>    <artifactId>commons-compress</artifactId>    <version>1.21</version> <!-- 或者更高的版本 --></dependency>

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

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

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

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

<dependency>    <groupId>org.apache.commons</groupId>    <artifactId>commons-compress</artifactId>    <version>1.21</version> <!-- 或者更高的版本 --></dependency>

然后,使用以下代码将文件打包成.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 <= fileCount; 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文件。

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

我来说两句