我正在尝试将文件夹的所有子文件夹放在zip文件中,所以我这样做:
public static void zipFolder(String inputFolderPath, String outZipPath) {
try {
FileOutputStream fos = new FileOutputStream(outZipPath);
ZipOutputStream zos = new ZipOutputStream(fos);
File srcFile = new File(inputFolderPath);
File[] files = srcFile.listFiles();
Log.d("", "Zip directory: " + srcFile.getName());
for (int i = 0; i < files.length; i++) {
Log.d("", "Adding file: " + files[i].getName());
byte[] buffer = new byte[1024];
FileInputStream fis = new FileInputStream(files[i]);
zos.putNextEntry(new ZipEntry(files[i].getName()));
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
fis.close();
}
zos.close();
} catch (IOException ioe) {
Log.e("", ioe.getMessage());
}
我在这个question
中看到了这段代码但是,代码进入循环,因为lenght
总是1024
循环发生在第二个文件中。我打印了fileList
:
在这种情况下,我尝试创建“aaaaaaa”文件,其他人来自另一次尝试,我不明白他们为什么显示,因为该目录没有任何zip文件。
PS:我正在尝试压缩的目录有两个子文件夹。我不知道这是否会影响。
答案 0 :(得分:0)
我解决了问题:D
在我看来,该方法不考虑子文件夹,只考虑文件。在我的情况下,我在files
目录中有两个文件夹及其中的内容。
所以,现在我为每个子文件夹调用方法,outZipPath
应该是一个公共目录:
Controller.zipFolder(getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath(), Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/content_" +
Util.formatoData.format(data).replace("/", ".") + ".zip");