假设我有以下目录结构。
D:\reports\january\
一月份内,假设有两个excel文件,分别是A.xls和B.xls。有很多地方都写过关于如何使用java压缩文件的内容。util。邮政编码。但是我想把一月文件夹本身压缩到reports文件夹中,这样一月和一月都可以。zip将出现在报告中。(这意味着当我解压一月.zip文件时,我应该会得到一月文件夹)。
谁能给我提供使用
java实现这一点的代码。util。邮政编码。请让我知道使用其他库是否可以更轻松地完成此操作。
谢谢。。。
它可以通过包java轻松解决。util。Zip
无需任何额外的Jar
文件
只需复制以下代码,然后用IDE运行它
//Import all needed packages
package general;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipUtils {
private List <String> fileList;
private static final String OUTPUT_ZIP_FILE = "Folder.zip";
private static final String SOURCE_FOLDER = "D:\\Reports"; // SourceFolder path
public ZipUtils() {
fileList = new ArrayList < String > ();
}
public static void main(String[] args) {
ZipUtils appZip = new ZipUtils();
appZip.generateFileList(new File(SOURCE_FOLDER));
appZip.zipIt(OUTPUT_ZIP_FILE);
}
public void zipIt(String zipFile) {
byte[] buffer = new byte[1024];
String source = new File(SOURCE_FOLDER).getName();
FileOutputStream fos = null;
ZipOutputStream zos = null;
try {
fos = new FileOutputStream(zipFile);
zos = new ZipOutputStream(fos);
System.out.println("Output to Zip : " + zipFile);
FileInputStream in = null;
for (String file: this.fileList) {
System.out.println("File Added : " + file);
ZipEntry ze = new ZipEntry(source + File.separator + file);
zos.putNextEntry(ze);
try {
in = new FileInputStream(SOURCE_FOLDER + File.separator + file);
int len;
while ((len = in .read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
} finally {
in.close();
}
}
zos.closeEntry();
System.out.println("Folder successfully compressed");
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void generateFileList(File node) {
// add file only
if (node.isFile()) {
fileList.add(generateZipEntry(node.toString()));
}
if (node.isDirectory()) {
String[] subNote = node.list();
for (String filename: subNote) {
generateFileList(new File(node, filename));
}
}
}
private String generateZipEntry(String file) {
return file.substring(SOURCE_FOLDER.length() + 1, file.length());
}
}
参考mkyong。。我根据当前问题的要求更改了代码
以下是Java 8示例:
public static void pack(String sourceDirPath, String zipFilePath) throws IOException {
Path p = Files.createFile(Paths.get(zipFilePath));
try (ZipOutputStream zs = new ZipOutputStream(Files.newOutputStream(p))) {
Path pp = Paths.get(sourceDirPath);
Files.walk(pp)
.filter(path -> !Files.isDirectory(path))
.forEach(path -> {
ZipEntry zipEntry = new ZipEntry(pp.relativize(path).toString());
try {
zs.putNextEntry(zipEntry);
Files.copy(path, zs);
zs.closeEntry();
} catch (IOException e) {
System.err.println(e);
}
});
}
}
你试过Zeroturnaround Zip库吗?它真的很整洁!压缩文件夹只是一行:
ZipUtil.pack(new File("D:\\reports\\january\\"), new File("D:\\reports\\january.zip"));
(感谢OlegŠelajev提供的示例)
问题内容: 假设我具有以下目录结构。 一月份内部有两个excel文件,分别是A.xls和B.xls。在很多地方,都有关于如何使用zip文件进行压缩的文章。但是,我要压缩的文件夹一月自身内部报告文件夹,这样既 月份 和 january.zip 将出席内部报告。( 这意味着当我解压缩january.zip文件时,我应该得到january文件夹 )。 谁能给我提供使用进行此操作的代码。请让我知道通过使用
首先,我没有看到任何其他问题可以“直接”帮助我解决问题,这就是为什么我决定创建一个新的问题。 以下代码被编程为解压缩多个文件和文件夹。 这段代码工作正常,但有一个重要的错误:它解压缩文件夹,但不是像这样显示它们: 文件1。txt 它显示了这一点: file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt 我做错了什么?
问题内容: 我在stackoveflow上找到了一些关于如何压缩特定文件的代码,但是特定文件夹又如何呢? 在中,有文件。压缩后,我还想删除文件夹的全部内容,除了。 我需要你的帮助。谢谢。 问题答案: 代码已于2015/04/22更新。 压缩整个文件夹: 压缩整个文件夹+删除除“ important.txt”以外的所有文件:
本文向大家介绍java实现文件夹解压和压缩,包括了java实现文件夹解压和压缩的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现文件夹解压和压缩的具体代码,供大家参考,具体内容如下 效果 实现多个文件以及文件夹的压缩和解压 代码分析 小结 压缩 ZipOutputStream可以把多份数据写入zip包; 解压 ZipInputStream可以读取zip格式的流; 以上就是本
问题内容: 如何更改压缩文件的以下命令? 该命令可以正常使用正常文件。我需要更改压缩文件的命令。 问题答案: 您需要像这样读取它们的压缩文件: 尝试这个:
问题内容: 在特定文件夹中拥有所有需要的文件后,我希望我的python脚本压缩该文件夹中的内容。 这可能吗? 我该怎么做呢? 问题答案: 脚本的改编版本为: 例: 它创建包含目录内容的存档。