在Kotlin中使用ZipOutputStream
来压缩包含文件的文件夹和子文件夹,你需要遍历文件夹中的所有文件和子文件夹,并将它们添加到ZIP文件中。以下是一个简单的示例代码,展示了如何实现这一功能:
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream
fun zipFolder(folderToZip: File, zipFile: File) {
val fos = FileOutputStream(zipFile)
val zos = ZipOutputStream(fos)
zipFile(folderToZip, folderToZip.name, zos)
zos.close()
fos.close()
}
fun zipFile(fileToZip: File, fileName: String, zos: ZipOutputStream) {
if (fileToZip.isHidden) {
return
}
if (fileToZip.isDirectory) {
if (fileName.endsWith("/")) {
zos.putNextEntry(ZipEntry(fileName))
zos.closeEntry()
} else {
zos.putNextEntry(ZipEntry("$fileName/"))
zos.closeEntry()
}
val children = fileToZip.listFiles()
for (childFile in children) {
zipFile(childFile, "$fileName/${childFile.name}", zos)
}
return
}
val fis = FileInputStream(fileToZip)
val buffer = ByteArray(1024)
var len: Int
zos.putNextEntry(ZipEntry(fileName))
while (fis.read(buffer).also { len = it } > 0) {
zos.write(buffer, 0, len)
}
zos.closeEntry()
fis.close()
}
fun main() {
val folderToZip = File("path/to/your/folder")
val zipFile = File("path/to/your/output.zip")
zipFolder(folderToZip, zipFile)
}
请注意,上述代码示例假设你有权限访问和读取指定的文件夹和文件。在实际应用中,你可能需要添加异常处理来确保程序的健壮性。
企业创新在线学堂
DB TALK 技术分享会
DB・洞见
企业创新在线学堂
云+社区技术沙龙[第11期]
Elastic 中国开发者大会
云+社区技术沙龙[第17期]
领取专属 10元无门槛券
手把手带您无忧上云