在kotlin中,如果我有一个现有文件,该如何压缩它。例如,我创建一个新的File()并将内容附加到该文件。现在将内容附加到它之后。我想压缩该文件。

我遇到的所有其他解决方案都没有帮助。我认为这很简单,但是我发现如何执行此操作很麻烦。

val fdir = filesDir
fdir.resolve("sometextfile.txt").takeIf { !it.exists() }?.appendText(text)

val sometextfile = fdir.resolve("sometextfile.txt")
// I now want sometextfile.txt in a zip file called somezipfile.zip

如何将sometextfile.txt放入一个名为somezipfile.zip的zip文件中,以便在解压缩时包含sometextfile.txt?

最佳答案

一个非常简单的方法:

fun zip(inFile: Path, outFile: Path) {
    runCatching {
        val contents = Files.readAllBytes(inFile)
        val out = Files.newOutputStream(outFile, StandardOpenOption.CREATE)

        ZipOutputStream(out).use { zipStream ->
            val zipEntry = ZipEntry(inFile.fileName.toString())
            zipStream.putNextEntry(zipEntry)
            zipStream.write(contents)
        }
    }.onFailure { exception ->
        // exception.printStackTrace()
    }
}

另外,请确保始终在UI线程之外执行I / O操作。

参考:https://developer.android.com/reference/java/util/zip/ZipOutputStream?hl=en

07-26 09:37