SNRK-60: slightly changed local driver and added unzip function
This commit is contained in:
parent
0dad4cd923
commit
9651ad1cd9
@ -15,19 +15,19 @@ public class LocalFile(private val path: String) : FileReader, FileWriter {
|
||||
|
||||
public class LocalDirectory(private val path: String) : Directory {
|
||||
override fun close() {}
|
||||
override suspend fun get(filename: String): FileReader = LocalFile("${this.path}/$filename")
|
||||
override suspend fun get(filename: String): FileReader = LocalFile("${this.path}${File.separator}$filename")
|
||||
|
||||
override suspend fun create(filename: String, ignoreIfExists: Boolean) {
|
||||
if (!File(filename).createNewFile() && !ignoreIfExists) {
|
||||
if (!File("${this.path}${File.separator}$filename").createNewFile() && !ignoreIfExists) {
|
||||
throw UnsupportedOperationException("File already exists")
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun put(filename: String): FileWriter = LocalFile("${this.path}/$filename")
|
||||
override suspend fun put(filename: String): FileWriter = LocalFile("${this.path}${File.separator}$filename")
|
||||
|
||||
override suspend fun getSubdir(dirpath: Path): Directory = LocalDirectory("${this.path}/$dirpath")
|
||||
override suspend fun getSubdir(dirpath: Path): Directory = LocalDirectory("${this.path}${File.separator}$dirpath")
|
||||
override suspend fun createSubdir(dirname: String, ignoreIfExists: Boolean): Directory {
|
||||
if (!File(dirname).mkdir() && !ignoreIfExists) {
|
||||
if (!File("${this.path}${File.separator}$dirname").mkdir() && !ignoreIfExists) {
|
||||
throw UnsupportedOperationException("File already exists")
|
||||
}
|
||||
return this.getSubdir(File(dirname).toPath())
|
||||
|
@ -0,0 +1,24 @@
|
||||
package space.kscience.snark.storage.unzip
|
||||
|
||||
import space.kscience.snark.storage.Directory
|
||||
import java.io.FileInputStream
|
||||
import java.util.zip.ZipInputStream
|
||||
|
||||
public suspend fun unzip(source_path: String, target: Directory) {
|
||||
val zis = ZipInputStream(FileInputStream(source_path))
|
||||
var zipEntry = zis.nextEntry
|
||||
while (zipEntry != null) {
|
||||
if (!zipEntry.isDirectory) {
|
||||
val filename = zipEntry.name
|
||||
target.create(filename, true)
|
||||
val fos = target.put(filename)
|
||||
val buffer = ByteArray(zipEntry.size.toInt())
|
||||
zis.read(buffer)
|
||||
fos.write(buffer)
|
||||
fos.close()
|
||||
}
|
||||
zipEntry = zis.nextEntry
|
||||
}
|
||||
zis.closeEntry()
|
||||
zis.close()
|
||||
}
|
Loading…
Reference in New Issue
Block a user