在Java中,包含没有绝对路径的文件和子目录的zip目录
我有一个Java程序,可以压缩目录中的所有文件和子目录。它使用绝对路径创建zip文件,例如c:\dir1\dirzip\,但我希望它只使用de文件和子目录创建文件,而不是绝对路径。 请你帮我个忙好吗?? 这是我的代码:在Java中,包含没有绝对路径的文件和子目录的zip目录,java,directory,zip,Java,Directory,Zip,我有一个Java程序,可以压缩目录中的所有文件和子目录。它使用绝对路径创建zip文件,例如c:\dir1\dirzip\,但我希望它只使用de文件和子目录创建文件,而不是绝对路径。 请你帮我个忙好吗?? 这是我的代码: import java.io.*; import java.util.zip.*; public class zip { public static void main(String argv[]) { try { ZipOu
import java.io.*;
import java.util.zip.*;
public class zip {
public static void main(String argv[]) {
try {
ZipOutputStream zos =
new ZipOutputStream(new FileOutputStream(
"c:\\pruebazip\\dancedragons.zip"));
zipDir("c:\\pruebazip\\dancedragons\\", zos);
zos.close();
}
catch (Exception e) {
}
}
public static void zipDir(String dir2zip, ZipOutputStream zos) {
try {
File zipDir = new File(dir2zip);
// lista del contenido del directorio
String[] dirList = zipDir.list();
// System.out.println(dirList[1]);
byte[] readBuffer = new byte[2156];
int bytesIn = 0;
System.out.println(dirList.length);
// recorro el directorio y añado los archivos al zip
for (int i = 0; i < dirList.length; i++) {
File f = new File(zipDir, dirList[i]);
if (f.isDirectory()) {
String filePath = f.getPath();
zipDir(filePath, zos);
System.out.println(filePath);
continue;
}
FileInputStream fis = new FileInputStream(f);
ZipEntry anEntry = new ZipEntry(f.getPath());
zos.putNextEntry(anEntry);
while ((bytesIn = fis.read(readBuffer)) != -1) {
zos.write(readBuffer, 0, bytesIn);
}
fis.close();
}
}
catch (Exception e) {
// handle exception
}
}
}
import java.io.*;
导入java.util.zip.*;
公共类邮政编码{
公共静态void main(字符串argv[]){
试一试{
ZipOutputStream zos=
新ZipOutputStream(新文件输出流(
“c:\\pruebazip\\dancedragons.zip”);
zipDir(“c:\\pruebazip\\dancedragons\\”,zos);
zos.close();
}
捕获(例外e){
}
}
公共静态void zipDir(字符串dir2zip、ZipOutputStream zos){
试一试{
File zipDir=新文件(dir2zip);
//董事会成员名单
字符串[]dirList=zipDir.list();
//System.out.println(dirList[1]);
字节[]读取缓冲区=新字节[2156];
int字节数=0;
System.out.println(dirList.length);
//雷科罗·埃尔·德雷科里奥·亚纳多·洛斯·阿尔·齐普
对于(int i=0;i
您的问题可能是声明
new ZipEntry(f.getPath())
仔细检查f.getPath()是否不是像C:\dir\…
那样的绝对路径
您可能需要类似于
new ZipEntry(dirList[i])
的内容。如果您希望每个zip条目都存储在相对于压缩文件夹的目录结构中,那么就不要使用文件完整路径构建ZipEntry:
new ZipEntry(f.getPath());
使用其相对于压缩目录的路径构造它:
String relativePath = zipDir.toURI().relativize(f.toURI()).getPath();
new ZipEntry(relativePath);
可能重复的