Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,包含没有绝对路径的文件和子目录的zip目录_Java_Directory_Zip - Fatal编程技术网

在Java中,包含没有绝对路径的文件和子目录的zip目录

在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

我有一个Java程序,可以压缩目录中的所有文件和子目录。它使用绝对路径创建zip文件,例如c:\dir1\dirzip\,但我希望它只使用de文件和子目录创建文件,而不是绝对路径。 请你帮我个忙好吗?? 这是我的代码:

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);
可能重复的