如何单独压缩每个文本文件



此代码将所有文本文件压缩到一个zip文件夹中。我想在Java代码中使用WinZip命令将每个文本文件压缩到一个单独的zip中。我该怎么做呢?

Runtime rt = Runtime.getRuntime();
//updateEnv();
System.out.println("Zipping file");
String[] command = {"C:\Program Files\WinZip\winzip64","-a","-r","-en","zippedfile.zip", "*.txt" };
try {
rt.exec(command);
System.out.println("Zipped file");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

我想提一个变化:

当需要将每个文件单独压缩-作为一个单独的新文件-时,然后gzip通常,至少在Unix/Linux下是这样。

所以README.txt会产生README.txt.gz。WinZip或7Zip也可以处理这些文件。

由于java已经有了压缩的方法,这里有一个直接的版本:

private static void main(String[] args) throws IOException {
Path dir = Paths.get("C:/Users/.../Documents");
Path gzDir = Paths.get("C:/Users/.../Documents/gz");
Files.createDirectories(gzDir);
Files.list(dir)
.filter(f -> f.getFileName().toString().endsWith(".txt"))
.forEach(f -> gzCompress(f, gzDir));
}
private static void gzCompress(Path file, Path gzDir) {
Path gzFile = gzDir.resolve(file.getFileName().toString() + ".gz");
try (FileInputStream fis = new FileInputStream(file.toFile());
FileOutputStream fos = new FileOutputStream(gzFile.toFile());
GZIPOutputStream gzos = new GZIPOutputStream(fos)) {
fis.transferTo(gzos);
} catch (IOException e) {
System.getLogger(App.class.getName()).log(System.Logger.Level.ALL, e);
}        
}

运行正常

File[] files = new File("C:\Users\user\Desktop\test").listFiles();
for (File file : files) {
if (file.isFile() && file.getName().endsWith(".txt")) {
String[] command = {"C:\Program Files\WinZip\winzip64","-a","-r","-en",file.getName() + ".zip", file.getName() };
rt.exec(command);
}
}

最新更新