这是我的要求我有一个文件夹(例如:主文件夹),其中包含三个项目
一个文件夹和两个文本文件 我想只压缩Main文件夹中包含的这三个项目。现在我正在使用Main文件夹压缩内容,结果压缩文件夹名称是“temp.zip”,当我解压缩时,我得到的是“Main文件夹” ”。但我的要求是当我解压缩“temp.zip”时,它应该只显示Main文件夹的内容。 任何人都能帮我实现这个目标吗? 谢谢。
编辑:这是我用来压缩文件的代码 这是我压缩文件的代码
public void zipFolder(String srcFolder, String destZipFile)
throws Exception {
ZipOutputStream zip = null;
FileOutputStream fileWriter = null;
fileWriter = new FileOutputStream(destZipFile);
zip = new ZipOutputStream(fileWriter);
addFolderToZip("", srcFolder, zip);
zip.flush();
zip.close();
}
private void addFolderToZip(String path, String srcFolder,
ZipOutputStream zip) throws Exception {
File folder = new File(srcFolder);
for (String fileName : folder.list()) {
if (path.equals("")) {
addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip);
} else {
addFileToZip(path + "/" + folder.getName(), srcFolder + "/"
+ fileName, zip);
}
}
}
private void addFileToZip(String path,String srcFile,ZipOutputStream zip) 抛出异常{
File folder = new File(srcFile);
if (folder.isDirectory()) {
addFolderToZip(path, srcFile, zip);
} else {
byte[] buf = new byte[1024];
int len;
FileInputStream in = new FileInputStream(srcFile);
zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));
while ((len = in.read(buf)) > 0) {
zip.write(buf, 0, len);
}
}
}
我用这些参数调用zipfolder方法: zipFolder(srcfolder,destipath +“/”+“temp.zip”);
答案 0 :(得分:0)
您可以使用TrueZip库。
这是一个 example。
答案 1 :(得分:0)
将一组单独的文件压缩到Android中的单个zip应该非常简单。这里有一个很好的教程可以帮助你入门:
http://www.jondev.net/articles/Zipping_Files_with_Android_%28Programmatically%29
答案 2 :(得分:0)
我刚从此post
复制从哑光答案中提到我成功使用了这个库。
你可以尝试Zip4j,一个纯java库来处理zip文件。它支持 加密/解密PKWare和AES加密方法。
主要特点:
- 创建,添加,提取,更新,从Zip文件中删除文件
- 读取/写入受密码保护的Zip文件
- 支持AES 128/256加密
- 支持标准邮编加密
- 支持Zip64格式
- 支持存储(无压缩)和Deflate压缩方法
- 从Split Zip文件创建或提取文件(例如:z01,z02,... zip)
- 支持Unicode文件名
- Progress Monitor
许可:
- Zip4j在Apache License,Version 2.0
下发布
答案 3 :(得分:0)
try {
String zipFile = "/locations/data.zip";
String srcFolder = "/locations";
File folder = new File(srcFolder);
String[] sourceFiles = folder.list();
//create byte buffer
byte[] buffer = new byte[1024];
/*
* To create a zip file, use
*
* ZipOutputStream(OutputStream out) constructor of ZipOutputStream
* class.
*/
//create object of FileOutputStream
FileOutputStream fout = new FileOutputStream(zipFile);
//create object of ZipOutputStream from FileOutputStream
ZipOutputStream zout = new ZipOutputStream(fout);
for (int i = 0; i < sourceFiles.length; i++) {
if (sourceFiles[i].equalsIgnoreCase("file.csv") || sourceFiles[i].equalsIgnoreCase("file1.csv")) {
sourceFiles[i] = srcFolder + fs + sourceFiles[i];
System.out.println("Adding " + sourceFiles[i]);
//create object of FileInputStream for source file
FileInputStream fin = new FileInputStream(sourceFiles[i]);
/*
* To begin writing ZipEntry in the zip file, use
*
* void putNextEntry(ZipEntry entry) method of
* ZipOutputStream class.
*
* This method begins writing a new Zip entry to the zip
* file and positions the stream to the start of the entry
* data.
*/
zout.putNextEntry(new ZipEntry(sourceFiles[i].substring(sourceFiles[i].lastIndexOf("/") + 1)));
/*
* After creating entry in the zip file, actually write the
* file.
*/
int length;
while ((length = fin.read(buffer)) > 0) {
zout.write(buffer, 0, length);
}
/*
* After writing the file to ZipOutputStream, use
*
* void closeEntry() method of ZipOutputStream class to
* close the current entry and position the stream to write
* the next entry.
*/
zout.closeEntry();
//close the InputStream
fin.close();
}
}
//close the ZipOutputStream
zout.close();
System.out.println("Zip file has been created!");
} catch (IOException ioe) {
System.out.println("IOException :" + ioe);
}
答案 4 :(得分:-1)
在Windows中,您可以通过以下步骤实现此目的,
1.打开主文件夹,选择要添加到zip文件中的文件 2.右击 - &gt;加入archieve 3.选择archieve格式为zip并单击“确定”