Файл ввода-вывода с мультиплатформенной формой Kotlin

#kotlin #kotlin-multiplatform #kotlin-native

Вопрос:

Я хотел бы выполнить некоторые основные операции с файловой системой в Windows mingwX64 (и, возможно, на других платформах): открывать, закрывать, читать, переименовывать, получать метаданные, перечислять файлы в каталоге.

Я нашел один проект, который обещает реализовать эту функциональность: KotlinxIO. Однако за последние годы не было достигнуто никакого прогресса.

Существуют ли какие-либо другие альтернативы или обходные пути?

Ответ №1:

В конце концов, я воспользовался библиотекой Корио. Документация могла бы быть лучше, но вся необходимая мне функциональность реализована для всех платформ (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()
}
 

Кроме того, он позволяет использовать один и тот же API для доступа к онлайн-файлам, zip-архивам и т.д. что довольно аккуратно.

Ответ №2:

Возможно, вам захочется взглянуть на ОКИО. Существует некоторая поддержка мультиплатформенности и целевой объект Windows, но я не знаю из первых рук, реализована ли часть файловой системы в Windows: https://github.com/square/okio

Ответ №3:

К сожалению, единственный обходной путь прямо сейчас-использовать ожидаемый/фактический шаблон https://kotlinlang.org/docs/mpp-connect-to-apis.html. Затем вы можете использовать java.io для Android, Bundle iOS и т.д. В зависимости от вашей целевой платформы

Комментарии:

1. @Алекс. T ответ правильный. java.io должен работать и в Windows, как и любая другая библиотека, которую вы использовали бы в любом другом приложении java(google для этого), но этот код следует использовать только внутри кода части Windows(фактического), чтобы использовать его из общего, вам нужно создать методы expect/actual.

2. Кажется невозможным import java.io вывернуться mingwX64Main наизнанку из коробки.