如何仅压缩文件夹中的文件而不压缩java文件夹
我用代码压缩包含文件和子文件夹的文件夹,我想要的是直接压缩文件,而不是它的文件夹。 当我打开zip文件时,我找到了文件夹,文件就在这个文件夹中,如下所示 我想要的是在打开zip文件后直接查找文件,如下所示 这是我使用的代码:如何仅压缩文件夹中的文件而不压缩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
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);
}
}
}
}