Kotlin Как я могу создать каталог. MkDir () не работает - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь создать каталог для данных моих приложений, который будет являться TXT-файлом. На данный момент мне все равно, находится ли он на внутреннем и / или внешнем хранилище. Я всюду искал решение и не могу найти ничего, что работает. MkDir () или MKDirs () не работает для меня.

Код, который я разместил, является лишь первой из многих попыток решить эту проблему. Я продолжаю пытаться изменить путь к каталогу. Он обнаружит, что существуют существующие пути, но если я установлю его на путь, который я хочу создать, он не будет работать. У меня есть разрешение на чтение и запись внешнего хранилища в моем манифесте. Я попытался найти код для запроса разрешения во время выполнения, но безуспешно. Поэтому я вручную разрешил хранение через настройки устройства для приложения и до сих пор ничего.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
val f = File("/TestFolder")
        if (f.exists() && f.isDirectory()) {
            println("Exists")
        } else {
            f.mkdir()
            println("Does Not Exist.")
        }

Ответы [ 3 ]

0 голосов
/ 03 октября 2019

Точное местоположение, в котором могут быть сохранены ваши файлы, может различаться на разных устройствах, поэтому вы должны использовать методы, описанные на этой странице, для доступа к внутренним и внешним путям хранения вместо абсолютных путей к файлам.

"/TestFolder" - это абсолютный путь, который не является частью внешнего хранилища. Это должно быть что-то вроде

val file = File(context.getExternalFilesDir(null), "TestFolder")
if (file.isDirectory()) { ... } else { 
    file.mkdirs()
    ...
}

(isDirectory подразумевает exists, поэтому нет необходимости проверять и то, и другое).

Обратите внимание, также существует различие между частным и общедоступным внешним хранилищем (см. https://developer.android.com/training/data-storage/files/external):

  • Публичные файлы: файлы, которые должны быть свободно доступны для других приложений и для пользователя. Когда пользователь удаляет ваше приложение, эти файлы должны оставаться доступными дляНапример, фотографии, снятые вашим приложением, следует сохранять как общедоступные файлы.

  • Личные файлы: файлы, хранящиеся в каталоге приложения, доступ к которому осуществляется с помощью Context.getExternalFilesDir (). файлы удаляются, когда пользователь удаляет ваше приложение. Хотя эти файлы технически доступны пользователю и другим приложениям, поскольку они находятся во внешнем хранилище, они не предоставляют ценности пользователю за пределами вашего приложения. Используйте этот каталог дляфайлы, которыми вы не хотите делиться с другими приложениями.

Выше предполагается, что вам нужен личный каталог.

0 голосов
/ 07 ноября 2019

Надеюсь, это сработает:

var filename = "blesson.txt"

    // create a File object for the parent directory
    val wallpaperDirectory = File("/sdcard/Wallpaper/")

    // have the object build the directory structure, if needed.
    wallpaperDirectory.mkdirs()

    // create a File object for the output file
    val outputFile = File(wallpaperDirectory, filename)

    // now attach the OutputStream to the file object, instead of a String representation
    try {
      val fos = FileOutputStream(outputFile)
    } catch (e: FileNotFoundException) {
      e.printStackTrace()
    }
0 голосов
/ 03 октября 2019

перед тем, как создать файл, вам нужно создать папку, а затем создать файл в этом, попробуйте, как показано ниже

        val extStorageDirectory = Environment.getExternalStorageDirectory().toString()
        val dir = File(extStorageDirectory)
                if (!dir.exists())
                    dir.mkdirs()
                val file: File
                file = File(extStorageDirectory, "/TestFolder")

                if (file.exists()) {
                    file.delete()
                    file.createNewFile()
                } else {
                    file.createNewFile()
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...