java 将一个文件或者文件夹打成zip,但是不压缩里面的文件
时间: 2023-11-26 10:04:21 浏览: 46
可以使用Java的ZipOutputStream类来实现将文件或文件夹打成zip包,但是不压缩里面的文件。
首先,需要遍历文件夹中的所有文件和子文件夹,并将它们添加到ZipOutputStream中。可以使用Java的File类和递归方法来实现这个过程。
接下来,需要设置ZipOutputStream的压缩级别为0,表示不进行压缩。可以使用setLevel方法来实现。
最后,将ZipOutputStream写入到Zip文件中。
下面是一个示例代码:
```java
import java.io.*;
import java.util.zip.*;
public class ZipExample {
public static void main(String[] args) {
String source = "path/to/source/folder";
String destination = "path/to/destination/zipfile.zip";
try {
FileOutputStream fos = new FileOutputStream(destination);
ZipOutputStream zos = new ZipOutputStream(fos);
File file = new File(source);
addFilesToZip(zos, file, "");
zos.setLevel(0);
zos.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void addFilesToZip(ZipOutputStream zos, File file, String parentDirectoryName) throws IOException {
String zipEntryName = parentDirectoryName + file.getName();
if (file.isDirectory()) {
if (!zipEntryName.isEmpty()) {
ZipEntry zipEntry = new ZipEntry(zipEntryName + "/");
zos.putNextEntry(zipEntry);
}
File[] files = file.listFiles();
for (File subFile : files) {
addFilesToZip(zos, subFile, zipEntryName + "/");
}
return;
}
FileInputStream fis = new FileInputStream(file);
ZipEntry zipEntry = new ZipEntry(zipEntryName);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
fis.close();
}
}
```
注意:这个代码只是一个示例,需要根据实际情况做一些修改和优化。例如,需要处理异常、检查文件是否存在等等。