Skip to main content
Glama
FileUtils.kt2.1 kB
package maestro.utils import java.io.File import java.io.IOException import java.nio.file.Files import java.nio.file.Path import java.util.zip.ZipEntry import java.util.zip.ZipFile import java.util.zip.ZipOutputStream import kotlin.io.path.absolutePathString import kotlin.io.path.createDirectories import kotlin.io.path.exists import kotlin.io.path.isDirectory import kotlin.streams.toList object FileUtils { /** * Zips directory * * @param from dir to zip * @param to output zip file */ fun zipDir(from: Path, to: Path) { val stream = to.toFile().outputStream() val files = Files.walk(from).filter { !it.isDirectory() }.toList() ZipOutputStream(stream).use { zs -> try { files.forEach { val relativePath = from.relativize(it).toString() val entry = ZipEntry(relativePath) zs.putNextEntry(entry) Files.copy(it, zs) zs.closeEntry() } } catch (e: IOException) { e.printStackTrace() } } } /** * Unzips file * * @param from zip file * @param to target dir */ fun unzip(from: Path, to: Path) { if (!to.exists()) to.createDirectories() ZipFile(from.absolutePathString()).use { zip -> zip.entries().asSequence().forEach { entry -> zip.getInputStream(entry).use { input -> val filePath = to.resolve(entry.name) if (!entry.isDirectory) { filePath.parent.createDirectories() Files.copy(input, filePath) } else filePath.createDirectories() } } } } /** * Deletes a directory and all it's contents. * * WARNING Use with caution! **/ fun deleteDir(dir: Path) { Files.walk(dir) .map(Path::toFile) .sorted(Comparator.reverseOrder()) .forEach(File::delete) } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mobile-dev-inc/Maestro'

If you have feedback or need assistance with the MCP directory API, please join our Discord server