即时使用此代码,它完美地创建了zip文件,例如我有文件夹
sdcard / music当我创建xxx.zip文件时,它会创建.zip文件,其中包含音乐/歌曲以及其中的一些子文件夹
但我想在.zip文件中排除“音乐”主文件夹并希望它直接开始包含其中的所有歌曲和子文件夹,如何操作
我使用这种方式,但它在拉链时也需要主文件夹名称
public void unzipbutton(View v){ // button click
try {
FileOutputStream fos = new FileOutputStream("/mnt/sdcard/songs.zip");
ZipOutputStream zos = new ZipOutputStream(fos);
addDirToZipArchive(zos, new File("/mnt/sdcard/music"), null);
zos.flush();
fos.flush();
zos.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void addDirToZipArchive(ZipOutputStream zos, File fileToZip, String parrentDirectoryName) throws Exception {
if (fileToZip == null || !fileToZip.exists()) {
return;
}
String zipEntryName = fileToZip.getName();
if (parrentDirectoryName!=null && !parrentDirectoryName.isEmpty()) {
zipEntryName = parrentDirectoryName + "/" + fileToZip.getName();
}
if (fileToZip.isDirectory()) {
System.out.println("+" + zipEntryName);
for (File file : fileToZip.listFiles()) {
addDirToZipArchive(zos, file, zipEntryName);
}
} else {
System.out.println(" " + zipEntryName);
byte[] buffer = new byte[1024];
FileInputStream fis = new FileInputStream(fileToZip);
zos.putNextEntry(new ZipEntry(zipEntryName));
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
fis.close();
}
}
任何人都对此有所帮助,谢谢
这一直很棘手,直到现在对我来说都没有办法:/
答案 0 :(得分:0)
在ZipEntry中检查zipEntryName的完整路径,它必须是:" music / Pink / try.mp3"只需调用子字符串以获取zipEntryName" Pink / try.mp3",您的zip文件将是相同的" songs.zip"但在其中你会找到文件夹" Pink"而是主文件夹" music / Pink ..."
它对我有用。