Java 通过 ZipOutputStream 类提供了将一个文件夹打成压缩包并导出的功能。以下是详细的攻略:
第一步:导入ZipOutputStream类
为了使用ZipOutputStream类,需要先将其导入到你的Java代码中。可以使用以下代码:
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class Main {
// Main方法
}
第二步:创建ZipOutputStream对象
接下来,需要创建一个ZipOutputStream对象,该对象将文件压缩并输出到指定的文件。
public static void main(String[] args) {
String sourceFolder = "/path/to/source/folder";
String outputFile = "/path/to/output.zip";
File file = new File(outputFile);
try {
FileOutputStream fos = new FileOutputStream(file);
ZipOutputStream zos = new ZipOutputStream(fos);
addFolderToZip(sourceFolder, zos);
zos.close();
fos.close();
} catch (FileNotFoundException e) {
System.out.println("File not found : " + e);
} catch (IOException e) {
System.out.println("IO Error : " + e);
}
}
该代码实现了将指定的文件夹(sourceFolder)打成压缩包,并将结果输出到指定路径的文件(outputFile)。
第三步:将文件夹加入到ZipOutputStream中
现在需要将文件夹添加到ZipOutputStream中,使其被压缩。
public static void addFolderToZip(String folderPath, ZipOutputStream zip, String parentFolder) throws Exception {
File folder = new File(folderPath);
for (String fileName : folder.list()) {
if (parentFolder == null) {
addFileToZip(folder.getAbsolutePath() + "/" + fileName, zip, folder.getName());
} else {
addFileToZip(folder.getAbsolutePath() + "/" + fileName, zip, parentFolder + "/" + folder.getName());
}
}
}
public static void addFileToZip(String filePath, ZipOutputStream zip, String folderName) throws Exception {
File file = new File(filePath);
if (file.isDirectory()) {
addFolderToZip(filePath, zip, folderName);
} else {
zip.putNextEntry(new ZipEntry(folderName + "/" + file.getName()));
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zip.write(buffer, 0, length);
}
zip.closeEntry();
fis.close();
}
}
实现了将文件夹中的所有文件按照层级关系添加到ZipOutputStream中。将每个文件添加到zip时需要使用ZipEntry对象。ZipEntry保存了文件在zip中的文件路径,其构造函数可以接收一个文件路径参数。添加文件到zip的方法为putNextEntry()。
示例
在上述代码中,我们已经实现了将一个文件夹打成压缩包的功能。下面给出两个示例:
示例一
我们以Windows系统为例,将D盘下的myproj项目文件夹打成压缩包,并将其输出到E盘的myproj.zip文件中。
public static void main(String[] args) {
String sourceFolder = "D:/myproj";
String outputFile = "E:/myproj.zip";
File file = new File(outputFile);
try {
FileOutputStream fos = new FileOutputStream(file);
ZipOutputStream zos = new ZipOutputStream(fos);
addFolderToZip(sourceFolder, zos);
zos.close();
fos.close();
} catch (FileNotFoundException e) {
System.out.println("File not found : " + e);
} catch (IOException e) {
System.out.println("IO Error : " + e);
} catch (Exception e) {
System.out.println("Error : " + e);
}
}
运行该程序后,我们可以在E:/目录下找到myproj.zip压缩包。
示例二
我们在Linux系统上,将/home/user/mydata目录和/home/user/mydocs目录打包成压缩包,并将其输出到/tmp目录下的文件中。
public static void main(String[] args) {
String folder1 = "/home/user/mydata";
String folder2 = "/home/user/mydocs";
String outputFile = "/tmp/mydata.zip";
File file = new File(outputFile);
try {
FileOutputStream fos = new FileOutputStream(file);
ZipOutputStream zos = new ZipOutputStream(fos);
addFolderToZip(folder1, zos);
addFolderToZip(folder2, zos);
zos.close();
fos.close();
} catch (FileNotFoundException e) {
System.out.println("File not found : " + e);
} catch (IOException e) {
System.out.println("IO Error : " + e);
} catch (Exception e) {
System.out.println("Error : " + e);
}
}
运行该程序后,我们可以在/tmp目录下找到mydata.zip压缩包。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java如何把文件夹打成压缩包并导出 - Python技术站