0
我在重寫kotlin腳本中的某些現有bash腳本。以kotlin腳本解壓縮文件[.kts]
其中一個腳本具有解壓縮目錄中所有文件的部分。在bash中:
unzip *.zip
有沒有一種很好的方法來解壓縮kotlin腳本中的文件?
我在重寫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 –