10

I would like to do some basic filesystem operations on mingwX64 Windows (and possibly other platforms): open, close, read, rename, get metadata, list files in a directory.

I have found one project that promises to implement this functionality: KotlinxIO. However, there has been no progress made in years.

Are there any other alternatives or workarounds?

Ford O.
  • 1,394
  • 8
  • 25

3 Answers3

7

In the end, I used the library Korio. The documentation could be better, but all of the functionality I need is implemented for all platforms (Jvm, Desktop, Android, ..):

import com.soywiz.korio.file.std.*

suspend fun main {
  val cwd = localCurrentDirVfs
  val files = cwd.list()
  cwd["Hello.txt"].open().close()
  cwd["Hello.txt"].renameTo("Hi.txt")
  val metadata = cwd["Hi.txt"].stat()
}

On top of that, it allows usage of the same API for accessing online files, zip archives, etc. which is pretty neat.

aSemy
  • 5,485
  • 2
  • 25
  • 51
Ford O.
  • 1,394
  • 8
  • 25
5

You might want to look at OKIO. There is some multiplatform support, and a Windows target, but I don't know first hand if the filesystem portion is implemented on Windows: https://github.com/square/okio

Kevin Galligan
  • 16,159
  • 5
  • 42
  • 62
3

Unfortunately the only workaround right now is to use the expect/actual pattern https://kotlinlang.org/docs/mpp-connect-to-apis.html. Then you can use java.io for Android, Bundle for iOS etc depending on your target platform

PhilipSa
  • 215
  • 2
  • 9
  • @Alex.T the answer is correct. `java.io` should work on windows too, same as any other library you would use in any other java app(google for it), but this code should only be used inside windows part code(actual), to use it from common you need to create expect/actual methods. – Phil Dukhov Jun 30 '21 at 09:26
  • It does not seem possible to `import java.io` inside `mingwX64Main` out of the box. – Ford O. Jun 30 '21 at 09:35