文章目录
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文件。