【问题标题】:How to create files and directories in Kotlin?如何在 Kotlin 中创建文件和目录?
【发布时间】:2018-03-05 20:54:15
【问题描述】:

我一直在尝试在 Android Studio 中使用 Kotlin 创建一个简单的路径,但不幸的是我无法这样做。 现在,我的代码如下所示:

lateinit var context : Context

private const val PERMISSION_REQUEST = 10

fun makeDir(){
    // I/O logic
    val filename: String = "ziemniakList.txt"
    val myDir: String = Environment.getDataDirectory().toString() +  "/Ziemniak/"
    // create a File object for the parent directory
    val sciezka = File(myDir)
    // have the object build the directory structure, if needed.
    sciezka.mkdirs()
    // create a File object for the output file
    //val outputFile = File(sciezka, filename)
    //println("makeDir!")
    Toast.makeText(context, myDir, Toast.LENGTH_LONG).show()
}

class NowaDostawa() : AppCompatActivity() {

private var permissions = arrayOf<String>(android.Manifest.permission.WRITE_EXTERNAL_STORAGE,android.Manifest.permission.READ_EXTERNAL_STORAGE)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_nowa_dostawa)
    var MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1

    context=this

    val menuLista = arrayOf("Online", "Gotówka", "Karta")
    val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, menuLista)
    spinner.adapter = adapter


    buttonNoweZamowienie.setOnClickListener{
        if(inputAdres.text.toString() == "" || inputKwota.text.toString() == ""){
            Toast.makeText(this, "All the fields needs to be filled!", Toast.LENGTH_LONG).show()
        }
        else{
            var allSuccess = 1
            for(i in permissions.indices){
                if(checkCallingOrSelfPermission(permissions[i]) == PackageManager.PERMISSION_DENIED){
                    allSuccess = 0
                }
            }
            if(allSuccess == 1){
                Toast.makeText(context, "Permissions granted!", Toast.LENGTH_LONG).show()
                makeDir()
                finish()
            }
            else{
                requestPermissions(permissions, PERMISSION_REQUEST)
            }
        }
    }

}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if(requestCode == PERMISSION_REQUEST){
        var allSuccess = true
        for(i in permissions.indices){
            if(grantResults[i] == PackageManager.PERMISSION_DENIED){
                allSuccess = false
                var requestAgain = shouldShowRequestPermissionRationale(permissions[i])
                if(requestAgain){
                    Toast.makeText(context, "Permissions hasn't been granted!", Toast.LENGTH_LONG).show()
                }
                else{
                    Toast.makeText(context, "Set permissions by yourself!", Toast.LENGTH_LONG).show()
                }
            }
        }
        if(allSuccess){
            Toast.makeText(context, "Permissions has been granted!", Toast.LENGTH_LONG).show()
            makeDir()
            finish()
        }
    }
}

所以基本上,当我点击“buttonNoweZamowienie”按钮时,文件夹应该在 /data/Ziemniak/ 下创建,但它没有。如您所见,我授予了权限并且效果很好,但我仍然发现很难创建一些基本目录。可能是什么问题?如果有什么我没有具体说明的,欢迎追问

提前谢谢你

【问题讨论】:

  • 我很好奇。你的minSdkVersion 是什么?
  • @es0329 minSdkVersion 19

标签: android directory kotlin


【解决方案1】:

Read is implicitly permitted when write is granted.

您是否还在应用的清单中声明了权限?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

【讨论】:

  • 是的,我确实声明过。我同意,我必须删除写权限
【解决方案2】:

别忘了在你的 AndroidManifest.xml 中添加这个 android:requestLegacyExternalStorage="true"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多