如何仅压缩文件夹中的文件而不压缩java文件夹

如何仅压缩文件夹中的文件而不压缩java文件夹,java,android,zip,unzip,Java,Android,Zip,Unzip,我用代码压缩包含文件和子文件夹的文件夹,我想要的是直接压缩文件,而不是它的文件夹。 当我打开zip文件时,我找到了文件夹,文件就在这个文件夹中,如下所示 我想要的是在打开zip文件后直接查找文件,如下所示 这是我使用的代码: ZipUtils appZip = new ZipUtils(); appZip.zipIt(new java.io.File("/sdcard/Alarms"), new java.io.File("/sdcard/DCIM/te

我用代码压缩包含文件和子文件夹的文件夹,我想要的是直接压缩文件,而不是它的文件夹。

当我打开zip文件时,我找到了文件夹,文件就在这个文件夹中,如下所示

我想要的是在打开zip文件后直接查找文件,如下所示

这是我使用的代码:

 ZipUtils appZip = new ZipUtils();
  appZip.zipIt(new java.io.File("/sdcard/Alarms"), new java.io.File("/sdcard/DCIM/test.zip"));
阶级

公共静态类ZipUtils{
私人最终清单文件清单;
私有列表路径;
公共ZipUtils(){
fileList=newarraylist();
路径=新阵列列表(25);
}
public void zipIt(java.io.File源文件、java.io.File zipFile){
if(sourceFile.isDirectory()){
字节[]缓冲区=新字节[1024];
java.io.FileOutputStream fos=null;
java.util.zip.ZipOutputStream zos=null;
试一试{
//这样可以确保压缩文件被放置
//放入zip文件中的文件夹中
//这和拉链上的一样
字符串sourcePath=sourceFile.getParentFile().getPath();
generateFileList(源文件);
fos=新的java.io.FileOutputStream(zipFile);
zos=newjava.util.zip.ZipOutputStream(fos);
System.out.println(“输出到Zip:+zipFile”);
java.io.FileInputStream in=null;
for(java.io.File文件:this.fileList){
字符串路径=file.getParent().trim();
path=path.substring(sourcePath.length());
if(path.startsWith(java.io.File.separator)){
路径=路径子字符串(1);
}
if(path.length()>0){
如果(!path.contains(path)){
路径。添加(路径);
java.util.zip.ZipEntry ze=new java.util.zip.ZipEntry(路径+“/”);
佐斯·普特内森特里(泽);
zos.closeEntry();
}
路径+=“/”;
}
String entryName=path+file.getName();
System.out.println(“添加的文件:“+entryName”);
java.util.zip.ZipEntry ze=new java.util.zip.ZipEntry(entryName);
佐斯·普特内森特里(泽);
试一试{
in=新的java.io.FileInputStream(文件);
内伦;
而((len=in.read(buffer))>0){
写入(缓冲区,0,len);
}
}最后{
in.close();
}
}
zos.closeEntry();
System.out.println(“文件夹成功压缩”);
}捕获(java.io.IOException-ex){
例如printStackTrace();
}最后{
试一试{
zos.close();
}捕获(java.io.ioe异常){
e、 printStackTrace();
}
}
}
}
受保护的void generateFileList(java.io.File节点){
//仅添加文件
if(node.isFile()){
添加(节点);
}
if(node.isDirectory()){
java.io.File[]subNote=node.listFiles();
for(java.io.File文件名:subNote){
generateFileList(文件名);
}
}
}
}

有人能帮我吗?

如果您不想在条目名中添加路径,那么为什么要在此处显式添加它:
String entryName=path+file.getName()
摆脱它,只需使用
file.GetName()
entryname的insetad,它应该可以像你描述的那样工作。@JoachimSuer感谢兄弟的回答,我删除了你告诉我的内容,现在我进入了zip文件(只有一个文件包含文件夹和子文件夹)),怎么了??
public static class ZipUtils {

        private final List<java.io.File> fileList;

        private List<String> paths;

        public ZipUtils() {
            fileList = new ArrayList<>();
            paths = new ArrayList<>(25);
        }

        public void zipIt(java.io.File sourceFile, java.io.File zipFile) {
            if (sourceFile.isDirectory()) {
                byte[] buffer = new byte[1024];
                java.io.FileOutputStream fos = null;
                java.util.zip.ZipOutputStream zos = null;

                try {

                    // This ensures that the zipped files are placed
                    // into a folder, within the zip file
                    // which is the same as the one been zipped
                    String sourcePath = sourceFile.getParentFile().getPath();
                    generateFileList(sourceFile);

                    fos = new java.io.FileOutputStream(zipFile);
                    zos = new java.util.zip.ZipOutputStream(fos);

                    System.out.println("Output to Zip : " + zipFile);
                    java.io.FileInputStream in = null;

                    for (java.io.File file : this.fileList) {
                        String path = file.getParent().trim();
                        path = path.substring(sourcePath.length());

                        if (path.startsWith(java.io.File.separator)) {
                            path = path.substring(1);
                        }

                        if (path.length() > 0) {
                            if (!paths.contains(path)) {
                                paths.add(path);
                                java.util.zip.ZipEntry ze = new java.util.zip.ZipEntry(path + "/");
                                zos.putNextEntry(ze);
                                zos.closeEntry();
                            }
                            path += "/";
                        }

                        String entryName = path + file.getName();
                        System.out.println("File Added : " + entryName);
                        java.util.zip.ZipEntry ze = new java.util.zip.ZipEntry(entryName);

                        zos.putNextEntry(ze);
                        try {
                            in = new java.io.FileInputStream(file);
                            int len;
                            while ((len = in.read(buffer)) > 0) {
                                zos.write(buffer, 0, len);
                            }
                        } finally {
                            in.close();
                        }
                    }

                    zos.closeEntry();
                    System.out.println("Folder successfully compressed");

                } catch (java.io.IOException ex) {
                    ex.printStackTrace();
                } finally {
                    try {
                        zos.close();
                    } catch (java.io.IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

        protected void generateFileList(java.io.File node) {
// add file only
            if (node.isFile()) {
                fileList.add(node);
            }
            if (node.isDirectory()) {
                java.io.File[] subNote = node.listFiles();
                for (java.io.File filename : subNote) {
                    generateFileList(filename);
                }
            }
        }
    }