Kotlin 中无法访问 txt 文件

No file access for txt file in Kotlin

提问人:VFarkas2023 提问时间:2/12/2023 最后编辑:VFarkas2023 更新时间:2/13/2023 访问量:102

问:

我试图将文本文件保存到应用程序的内部存储中,但它不起作用

代码是

 val defFileName = "text.def"
    val ioFile = File(defFileName)
ioFile.createnewFile()
        ioFile.writeText("Hello World")

我尝试了不同的代码版本来实现它,但每次我都得到

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
                            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
                        Caused by: java.lang.reflect.InvocationTargetException
                            at java.lang.reflect.Method.invoke(Native Method)
                            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
                        Caused by: java.io.FileNotFoundException: hello_file: open failed: EROFS (Read-only file system)

EROFS ReadOnlyFileSystem

有什么帮助吗?

编辑:

我得到路径

mContext.applicationInfo.dataDir.toString()

此代码运行没有错误,ioDefFile =“xxx.def”

  val fileOutputStream:FileOutputStream

  try {

            fileOutputStream = context.openFileOutput(ioDefFile, Context.MODE_PRIVATE)
         fileOutputStream.write("just a textString".toByteArray())

        }catch (e: Exception){
            e.printStackTrace()
        }

此代码显示 -> open failed: EROFS(只读文件系统)

 try{
        val fileWriter = FileWriter(ioDefFile)

        for (x in 0..(DSSize-1)){
            fileWriter.write(dl[x]+ "\n")
           
        }

        fileWriter.close()
    } catch (exception: Exception){
        println(exception.message)
    }

在代码 2 中没有看到错误 - 如果不添加路径,它不适用于 oder

Android Kotlin 文件 文本 io

评论

0赞 CommonsWare 2/12/2023
"text.def"不是有效的文件系统路径。

答:

0赞 Dilshad 2/12/2023 #1

从提供的代码中,您正在尝试创建一个文件并写入它。 如前所述,该变量不会提供有效的路径defFileName

所以你需要把你的代码修改成这样的东西,以获得结果

    val defFileName = "text.def"
    val ioFile = File(context.getExternalFilesDir(
        Environment.DIRECTORY_DOCUMENTS),
        "name.txt")
    ioFile.writeText("hello")
0赞 VFarkas2023 2/13/2023 #2

现在它:)工作

val foStream: FileOutputStream  

try {

            foStream = context.openFileOutput(ioDefFile, Context.MODE_PRIVATE)

            for (x in 0..(DSSize - 1)) {
                foStream.bufferedWriter().write(dl[x])
                foStream.bufferedWriter().newLine()
                
            }


        } catch (e: Exception) {
            e.printStackTrace()
        }

评论

0赞 Community 2/16/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。