如何使用java复制某个目录中的所有文件并重新创建目录结构?

如何使用java复制某个目录中的所有文件并重新创建目录结构?,java,file,directory,Java,File,Directory,而不是一次复制一个文件。我正在压缩所有文件并解压缩它们。我使用下面的代码来压缩和解压文件,但是如何解压文件并根据文件描述动态地重新创建目录结构呢。 例如:如果文件是 c://users//desktop//635289512-251.txt 我需要把文件放进去 c://users//desktop//635\u users//2895\u access//635289512-251.txt 谢谢你的帮助 public static void zip(File directory, File zi

而不是一次复制一个文件。我正在压缩所有文件并解压缩它们。我使用下面的代码来压缩和解压文件,但是如何解压文件并根据文件描述动态地重新创建目录结构呢。 例如:如果文件是

c://users//desktop//635289512-251.txt

我需要把文件放进去

c://users//desktop//635\u users//2895\u access//635289512-251.txt

谢谢你的帮助

public static void zip(File directory, File zipfile) throws IOException {
    URI base = directory.toURI();
    Deque<File> queue = new LinkedList<File>();
    queue.push(directory);
    OutputStream out = new FileOutputStream(zipfile);
    Closeable res = out;
    try {
        ZipOutputStream zout = new ZipOutputStream(out);
        res = zout;
        while (!queue.isEmpty()) {
            directory = queue.pop();
            for (File kid : directory.listFiles()) {
                String name = base.relativize(kid.toURI()).getPath();
                if (kid.isDirectory()) {
                    queue.push(kid);
                    name = name.endsWith("/") ? name : name + "/";
                    zout.putNextEntry(new ZipEntry(name));
                } else {
                    zout.putNextEntry(new ZipEntry(name));
                    copy(kid, zout);
                    zout.closeEntry();
                }
            }
        }
    } finally {
        res.close();
    }
}

 public static void unzip(File zipfile, File directory) throws IOException {
    ZipFile zfile = new ZipFile(zipfile);
    Enumeration<? extends ZipEntry> entries = zfile.entries();
    while (entries.hasMoreElements()) {
        ZipEntry entry = entries.nextElement();
        File file = new File(directory, entry.getName());
        if (entry.isDirectory()) {
            file.mkdirs();
        } else {
            file.getParentFile().mkdirs();
            InputStream in = zfile.getInputStream(entry);
            try {
                copy(in, file);
            } finally {
                in.close();
            }
        }
    }
}
publicstaticvoidzip(文件目录、文件zipfile)引发IOException{
URI base=directory.toURI();
Deque queue=new LinkedList();
push(目录);
OutputStream out=新文件OutputStream(zipfile);
可关闭的res=输出;
试一试{
ZipOutputStream zout=新ZipOutputStream(输出);
res=zout;
而(!queue.isEmpty()){
directory=queue.pop();
对于(文件kid:directory.listFiles()){
String name=base.relativize(kid.toURI()).getPath();
if(kid.isDirectory()){
排队。推(小孩);
name=name.endsWith(“/”)?name:name+“/”;
zout.putNextEntry(新ZipEntry(名称));
}否则{
zout.putNextEntry(新ZipEntry(名称));
复印件(孩子,佐特);
zout.closeEntry();
}
}
}
}最后{
res.close();
}
}
公共静态void解压(文件zipfile,文件目录)引发IOException{
ZipFile zfile=新ZipFile(ZipFile);
列举