以kotlin脚本解压缩文件[.kts]
问题描述:
我在重写kotlin脚本中的某些现有bash脚本。以kotlin脚本解压缩文件[.kts]
其中一个脚本具有解压缩目录中所有文件的部分。在bash中:
unzip *.zip
有没有一种很好的方法来解压缩kotlin脚本中的文件?
答
最简单的方法是TP只使用EXEC unzip
(假设你的zip文件的名称存储在zipFileName
变量):
ProcessBuilder()
.command("unzip", zipFileName)
.redirectError(ProcessBuilder.Redirect.INHERIT)
.redirectOutput(ProcessBuilder.Redirect.INHERIT)
.start()
.waitFor()
不同的方式,即更轻便(它只能运行任何OS,并且不需要unzip
可执行文件存在),但少了几分功能全(它不会恢复Unix许可),是做在代码解压:
import java.io.File
import java.util.zip.ZipFile
ZipFile(zipFileName).use { zip ->
zip.entries().asSequence().forEach { entry ->
zip.getInputStream(entry).use { input ->
File(entry.name).outputStream().use { output ->
input.copyTo(output)
}
}
}
}
如果您需要扫描所有*.zip
文件,那么你可以做这样的:
File(".").list { _, name -> name.endsWith(".zip") }?.forEach { zipFileName ->
// any of the above approaches
}
或像这样:
import java.nio.file.*
Files.newDirectoryStream(Paths.get("."), "*.zip").forEach { path ->
val zipFileName = path.toString()
// any of the above approaches
}
也许使用'的PathMatcher(“水珠:$模式”)'文件过滤器将在模拟做得更好什么bash呢? – Minami
@Minami谢谢你的想法。 'PathMather'的解决方案非常冗长,但我添加了一个类似的替代解决方案,使用Files.newDirectoryStream –