gpt4 book ai didi

java - Android 中 ZIP 文件夹中的 par baseName 是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 09:36:50 26 4
gpt4 key购买 nike

以下代码来自 What is a good Java library to zip/unzip files? 上的文章

代码将一个文件夹以及所有包含的文件和子文件夹压缩到一个 zip 文件中。

我不明白 par BaseName 是什么意思,以及如何将值传递给 par baseName ?

private void addFolderToZip(File folder, ZipOutputStream zip, String baseName) throws IOException {
File[] files = folder.listFiles();
for (File file : files) {
if (file.isDirectory()) {
addFolderToZip(file, zip, baseName);
} else {
String name = file.getAbsolutePath().substring(baseName.length());
ZipEntry zipEntry = new ZipEntry(name);
zip.putNextEntry(zipEntry);
IOUtils.copy(new FileInputStream(file), zip);
zip.closeEntry();
}
}
}

最佳答案

假设这是目录结构:

mnt/sdcard/Android/data/testzip/ 是所有要归档的文件的目录,如下所示 tobezipped 目录:

mnt/sdcard/Android/data/testzip/tobezipped/1.txt
mnt/sdcard/Android/data/testzip/tobezipped/directory/2.txt

如果我们要对以上所有的文件和目录进行归档,我们需要为归档文件提供一个名称,并将其命名为zipcreated.zip,在该目录下创建

mnt/sdcard/Android/data/testzip/ as mnt/sdcard/Android/data/testzip/zipcreated.zip

下面是归档目录的代码:

new Thread(new Runnable() {
@Override
public void run() {

// Moves the current Thread into the background
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);

//tobezipped holds the content of the directory or folder to be zipped
//zipcreated.zip zips or archive holds the contents of the tobezipped after archived

ZipUtils.createZipFileOfDirectory("mnt/sdcard/Android/data/testzip/tobezipped/",
"mnt/sdcard/Android/data/testzip/zipcreated.zip");
}
}).start();

============================================= ===========================

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.apache.commons.io.IOUtils;
/**
* Created by Android Studio
* User: Anurag Singh
* Date: 28/2/17
* Time: 2:14 PM
*/

public class ZipUtils {

private static final String TAG = ZipUtils.class.getSimpleName();

public static void createZipFileOfDirectory(String srcDir, String zipOutput) {

try{

File srcDirFile = new File(srcDir);
File zipOutputFile = new File(zipOutput);

if ( !srcDirFile.exists() || !srcDirFile.isDirectory() ) {
throw new IllegalArgumentException(
srcDirFile.getAbsolutePath() + " is not a directory!");
}
if ( zipOutputFile.exists() && !zipOutputFile.isFile() ) {
throw new IllegalArgumentException(
zipOutputFile.getAbsolutePath() + " exists but is not a file!");
}

ZipOutputStream zipOutputStream = null;
String baseName = srcDirFile.getAbsolutePath() + File.pathSeparator;

try {
zipOutputStream = new ZipOutputStream(new FileOutputStream(zipOutput));
addDirToZip(srcDirFile, zipOutputStream, baseName);
} finally {
IOUtils.close(zipOutputStream);
}
}catch(Exception e){
e.printStackTrace();
}
}


private static void addDirToZip(File dir, ZipOutputStream zip, String baseName) throws IOException {
File[] files = dir.listFiles();

for (File file : files) {
if (file.isDirectory()) {
addDirToZip(file, zip, baseName);
} else {
String entryName = file.getAbsolutePath().substring(
baseName.length());
ZipEntry zipEntry = new ZipEntry(entryName);
zip.putNextEntry(zipEntry);

FileInputStream fileInput = new FileInputStream(file);
try {
IOUtils.copy(fileInput, zip);
zip.closeEntry();
} finally {
IOUtils.close(fileInput);
}
}
}
}
}

什么是 baseName?

baseName用于ZipUtils.addDirToZip()中对entryName的支持,从中获取要归档的文件或目录名这种情况。

baseName=/mnt/sdcard/Android/data/testzip/tobezipped:
entryName=1.txt
entryName=directory2/2.txt

基本上,基本名称只是目录 mnt/sdcard/Android/data/testzip/tobezipped/ 下的文件名。 entryName 不能是 directory2 因为它是一个目录。

关于java - Android 中 ZIP 文件夹中的 par baseName 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42433596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com