2017-10-08 174 views
0

我在重寫kotlin腳本中的某些現有bash腳本。以kotlin腳本解壓縮文件[.kts]

其中一個腳本具有解壓縮目錄中所有文件的部分。在bash中:

unzip *.zip 

有沒有一種很好的方法來解壓縮kotlin腳本中的文件?

回答

2

最簡單的方法是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   
} 
+0

也許使用'的PathMatcher(「水珠:$模式」)'文件過濾器將在模擬做得更好什麼bash呢? – Minami

+0

@Minami謝謝你的想法。 'PathMather'的解決方案非常冗長,但我添加了一個類似的替代解決方案,使用Files.newDirectoryStream –