首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Kotlin中创建一个ZIP文件

在Kotlin中创建一个ZIP文件
EN

Stack Overflow用户
提问于 2017-09-14 14:44:16
回答 7查看 15.6K关注 0票数 21

我正试图在Kotlin中创建一个zip文件。这是代码:

代码语言:javascript
复制
fun main(args: Array<String>) {
var files: Array<String> = arrayOf("/home/matte/theres_no_place.png", "/home/matte/vladstudio_the_moon_and_the_ocean_1920x1440_signed.jpg")
var out = ZipOutputStream(BufferedOutputStream(FileOutputStream("/home/matte/Desktop/test.zip")))
var data = ByteArray(1024)
for (file in files) {
    var fi = FileInputStream(file)
    var origin = BufferedInputStream(fi)
    var entry = ZipEntry(file.substring(file.lastIndexOf("/")))
    out.putNextEntry(entry)
    origin.buffered(1024).reader().forEachLine {
        out.write(data)
    }
    origin.close()
}
out.close()}

创建了zip文件,但是里面的文件已经损坏了!

EN

Stack Overflow用户

发布于 2017-09-14 15:19:03

1)您正在为输入文件的每一行向out写入一个空字节数组。

2)在BufferedReader中没有必要,因为读取和写入字节就足够了,而不是行(这将导致未打包的内容与原始内容不匹配)。

3)如有例外情况,所有溪流均应关闭。在java中使用use方法,就像用资源进行尝试一样。

4) val而不是var有可能

5)除了快速测试片段之外,不要使用绝对路径。

6)这个片段对Kotlin来说不是惯用的方式(见托德的答案)。

因此,它应该是这样工作的(尽管以Java的方式):

代码语言:javascript
复制
fun main(args: Array<String>) {
    val files: Array<String> = arrayOf("/home/matte/theres_no_place.png", "/home/matte/vladstudio_the_moon_and_the_ocean_1920x1440_signed.jpg")
    ZipOutputStream(BufferedOutputStream(FileOutputStream("/home/matte/Desktop/test.zip"))).use { out ->
        val data = ByteArray(1024)
        for (file in files) {
            FileInputStream(file).use { fi ->
                BufferedInputStream(fi).use { origin ->
                    val entry = ZipEntry(file)
                    out.putNextEntry(entry)
                    while (true) {
                        val readBytes = origin.read(data)
                        if (readBytes == -1) {
                            break
                        }
                        out.write(data, 0, readBytes)
                    }
                }
            }
        }
    }
}

编辑:--我已经用我的文件运行了这个片段,它运行得很好。

票数 1
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46222055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档