Java 压缩子目录仅压缩子目录的内容,而不压缩子目录
下面是我试过的代码。它只压缩子文件夹的内容,而不压缩文件夹 我需要压缩所有子文件夹以及内容。我在这里做错了什么。 示例:我在demo文件夹中有一个文件夹“demo”,我有a、b、c文件夹。我想压缩a,b,c以及内容和压缩不应该包括家长是演示Java 压缩子目录仅压缩子目录的内容,而不压缩子目录,java,file,zip,Java,File,Zip,下面是我试过的代码。它只压缩子文件夹的内容,而不压缩文件夹 我需要压缩所有子文件夹以及内容。我在这里做错了什么。 示例:我在demo文件夹中有一个文件夹“demo”,我有a、b、c文件夹。我想压缩a,b,c以及内容和压缩不应该包括家长是演示 static void addDir(File dirObj, ZipOutputStream out) throws IOException { File[] files = dirObj.listFiles(); byte
static void addDir(File dirObj, ZipOutputStream out) throws IOException {
File[] files = dirObj.listFiles();
byte[] tmpBuf = new byte[1024];
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
addDir(files[i], out);
continue;
}
FileInputStream in = new FileInputStream(files[i].getAbsolutePath());
System.out.println(" Adding: " + files[i].getName());
out.putNextEntry(new ZipEntry(files[i].getName()));
int len;
while ((len = in.read(tmpBuf)) > 0) {
out.write(tmpBuf, 0, len);
}
out.closeEntry();
in.close();
}
}
public static void zipFiles(File[] subd) {
String zipFile = "test.zip";
try {
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
for (File dir : subd) {
addDir(dir, zos);
}
// close the ZipOutputStream
zos.close();
} catch (IOException ioe) {
System.out.println("Error creating zip file: " + ioe);
}
static void addDir(文件dirObj,ZipOutputStream out)抛出IOException{
File[]files=dirObj.listFiles();
字节[]tmpBuf=新字节[1024];
对于(int i=0;i0){
out.write(tmpBuf,0,len);
}
out.closeEntry();
in.close();
}
}
公共静态void zipFiles(文件[]子文件){
字符串zipFile=“test.zip”;
试一试{
FileOutputStream fos=新的FileOutputStream(zipFile);
ZipoutStream zos=新ZipoutStream(fos);
for(文件目录:subd){
addDir(dir,zos);
}
//关闭ZipOutputStream
zos.close();
}捕获(ioe异常ioe){
System.out.println(“创建zip文件时出错:“+ioe”);
}
这是我为有层次结构和无层次结构的zip文件和目录编写的代码。
zip.getHierarchy().equals(“F”)
part完成您想要做的工作。
在这段代码中,必须将源文件、目标、层次结构(T/F)作为参数传递。
此外,您可能需要一个DTO类
public static void Start() throws IOException{
FileOutputStream fos = new FileOutputStream(zip.getDestination());
ZipOutputStream zipOut = new ZipOutputStream(fos);
File fileToZip = new File(zip.getSourcePath());
zipDirectory(fileToZip, fileToZip.getName(), zipOut);
zipOut.close();
fos.close();
}
public static void zipDirectory(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {
if (fileToZip.isDirectory()) {
File[] children = fileToZip.listFiles();
for (File childFile : children) {
if(zip.getHierarchy().equals("T")) {
zipDirectory(childFile, childFile.getPath(), zipOut);
}else if(zip.getHierarchy().equals("F")){
zipDirectory(childFile, childFile.getName(), zipOut);
}
}
return;
}
doZip(fileToZip,fileName,zipOut);
}
public static void doZip(File fileToZip,String fileName,ZipOutputStream zipOut) throws IOException {
FileInputStream fis = new FileInputStream(fileToZip);
ZipEntry zipEntry = new ZipEntry(fileName);
zipOut.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
fis.close();
}
可能类似于起点(
out.putnextery(新的ZipEntry(files[i].getName());
需要包含一个path元素,如链接示例所述)如果我添加路径,它会添加完整的obsolute path,我只需要zip中的所有子文件夹及其内容。我已经用示例解释了阅读链接的示例-它只添加相对路径(基于源路径)您是说这行字符串name=srcFile.getPath();name=name.replace(rootPath.getPath(),“”);这是基本想法的开始(只是一种方法)