Java文件流的处理方式是 Java IO 提供的一种输入输出流 API。Java 的 IO 包提供了对外部数据来源和写入运行环境的能力,可以用于本地文件、网络资源、内存缓冲区等。Java IO 分为输入流和输出流两部分,其中输入流主要负责读取数据,而输出流则负责写入数据到指定位置。
Java 中可以使用java.util.zip和java.io包中提供的压缩流类来完成文件的打包成zip。
具体步骤如下:
- 创建ZipOutputStream对象。ZipOutputStream是一个Java API,用于压缩文件或文件夹。
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(outputZipFile));
- 创建ZipEntry对象。ZipEntry对象代表被压缩的文件或文件夹,可以设置压缩级别、时间戳等信息。
ZipEntry zipEntry = new ZipEntry(filePath);
zipEntry.setTime(file.lastModified());
zipOut.setLevel(Deflater.DEFAULT_COMPRESSION);
zipOut.putNextEntry(zipEntry);
- 往ZipOutputStream对象中写入数据。
byte[] buffer = new byte[4096];
int length;
while ((length = in.read(buffer)) > 0) {
zipOut.write(buffer, 0, length);
}
- 关闭ZipOutputStream和InputStream对象。
zipOut.closeEntry();
zipOut.close();
in.close();
下面是两个示例:
示例一:打包一个文件
public static void zipFile(File inputFile, File outputFile) throws IOException {
FileInputStream in = new FileInputStream(inputFile);
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(outputFile));
ZipEntry zipEntry = new ZipEntry(inputFile.getName());
zipEntry.setTime(inputFile.lastModified());
zipOut.setLevel(Deflater.DEFAULT_COMPRESSION);
zipOut.putNextEntry(zipEntry);
byte[] buffer = new byte[4096];
int length;
while ((length = in.read(buffer)) > 0) {
zipOut.write(buffer, 0, length);
}
zipOut.closeEntry();
zipOut.close();
in.close();
}
示例二:打包一个文件夹
public static void zipFolder(File inputFolder, File outputFile) throws IOException {
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(outputFile));
zipOut.setLevel(Deflater.DEFAULT_COMPRESSION);
addToZip(zipOut, inputFolder, inputFolder);
zipOut.close();
}
private static void addToZip(ZipOutputStream zipOut, File fileToZip, File inputFile) throws IOException {
if (fileToZip.isHidden()) {
return;
}
if (fileToZip.isDirectory()) {
File[] children = fileToZip.listFiles();
for (File childFile : children) {
addToZip(zipOut, childFile, inputFile);
}
return;
}
FileInputStream in = new FileInputStream(fileToZip);
String zipFilePath = fileToZip.getCanonicalPath().substring(inputFile.getCanonicalPath().length() + 1);
ZipEntry zipEntry = new ZipEntry(zipFilePath);
zipEntry.setTime(fileToZip.lastModified());
zipOut.putNextEntry(zipEntry);
byte[] buffer = new byte[4096];
int length;
while ((length = in.read(buffer)) > 0) {
zipOut.write(buffer, 0, length);
}
in.close();
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 文件流的处理方式 文件打包成zip - Python技术站