如何通过Java调用WinZip命令单独压缩每个TXT文件
实现单个TXT文件独立压缩为Zip的Java方案
要实现每个TXT文件单独压缩成独立Zip,核心思路是遍历目标目录下的所有TXT文件,为每个文件单独调用WinZip命令,具体实现步骤如下:
关键修改点
- 先遍历指定目录下的所有
.txt文件,排除子目录(如需处理子目录可调整遍历逻辑) - 对每个TXT文件,生成对应的Zip文件名(比如
test.txt对应test.zip) - 为每个文件单独构造WinZip命令,去掉原命令中的
-r(递归参数,单个文件不需要) - 执行命令时等待进程完成,避免异步导致的异常
完整代码示例
import java.io.File; import java.io.IOException; public class SingleFileZip { public static void main(String[] args) { // 指定要处理的目录(可替换为自定义路径,比如"C:\\your\\txt\\folder") File txtDir = new File("."); // WinZip的执行文件路径,根据实际安装路径调整 String winZipPath = "C:\\Program Files\\WinZip\\winzip64"; // 遍历目录下的所有TXT文件 File[] txtFiles = txtDir.listFiles((dir, name) -> name.toLowerCase().endsWith(".txt")); if (txtFiles == null || txtFiles.length == 0) { System.out.println("未找到任何TXT文件"); return; } Runtime rt = Runtime.getRuntime(); System.out.println("开始逐个压缩TXT文件..."); for (File txtFile : txtFiles) { // 生成对应的Zip文件名:将.txt后缀替换为.zip String zipFileName = txtFile.getName().replace(".txt", ".zip"); // 构造WinZip命令:-a表示添加文件,-en表示使用标准压缩级别 String[] command = { winZipPath, "-a", "-en", zipFileName, txtFile.getAbsolutePath() }; try { Process process = rt.exec(command); // 等待压缩进程执行完成 int exitCode = process.waitFor(); if (exitCode == 0) { System.out.println("已完成压缩:" + txtFile.getName() + " -> " + zipFileName); } else { System.out.println("压缩失败:" + txtFile.getName() + ",退出码:" + exitCode); } } catch (IOException | InterruptedException e) { System.err.println("处理文件" + txtFile.getName() + "时出错:"); e.printStackTrace(); } } System.out.println("所有文件压缩完成"); } }
代码说明
- 目录遍历:使用
listFiles结合过滤器,只筛选后缀为.txt的文件 - 命令构造:每个命令针对单个TXT文件,输出Zip文件名与原TXT文件名对应,去掉了原命令中的
-r(递归参数,单个文件无需使用) - 进程等待:调用
process.waitFor()等待WinZip进程执行完毕,确保每个文件压缩完成后再处理下一个,避免资源冲突 - 异常处理:分别捕获IO异常和中断异常,输出具体出错的文件名,便于排查问题
内容的提问来源于stack exchange,提问作者Akshatha S M
相关产品推荐
相关产品推荐

