【问题标题】:Trying to load a file into main activity's onCreate尝试将文件加载到主要活动的 onCreate
【发布时间】:2018-03-05 05:56:32
【问题描述】:

我要做的是测试文件“turma.dat”是否已经存在,如果存在我就打开它,如果它不存在,我创建一个新文件并保存它。当我第一次启动应用程序时,它会创建文件,但每次我再次启动它时,文件都会以白色创建。

主活动:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val toolbar = findViewById(R.id.toolbar) as Toolbar
    setSupportActionBar(toolbar)

    var turma : Turma
    var file = File("turma.dat")

    if(file.exists()) {
        turma = this.abrirArquivo()
    }else{
        turma = Turma()
        ArquivoUtils(turma, this.applicationContext)
    }

方法 abrirArquivo:

@Throws(IOException::class, ClassNotFoundException::class)
fun abrirArquivo(): Turma {

    val fis = this.applicationContext.openFileInput("turma.dat")
    val ois = ObjectInputStream(fis)

    return ois.readObject() as Turma
}

类ArquivoUtils:(负责接收Turma对象添加到文件并保存)

class ArquivoUtils internal constructor( var turminha: Turma, var context : Context) {
internal val fos = this.context.openFileOutput("turma.dat", Context.MODE_PRIVATE)
internal val oos = ObjectOutputStream(fos)

init {
    this.salvarArquivo()
    this.closeFile()
}

@Throws(IOException::class)
private fun salvarArquivo() {
    oos.writeObject(turminha)
    this.closeFile()
}

@Throws(IOException::class)
fun closeFile() {
    oos.close()
}

【问题讨论】:

  • “白创造”是什么意思?
  • 文件为空。
  • 所以File.exists("turma.dat") 返回真?您是否使用调试器单步执行了代码?
  • 我真的不知道这是怎么回事。我对在 Android 上使用文件感到非常困惑。我在桌面上处理了很多文件,但我不知道如何测试我的文件是否已经存在于 android 中。

标签: android file kotlin


【解决方案1】:

file.exists() 很可能没有在你期望的地方寻找。方法openFileInputopenFileOutput 处理应用程序私有位置中的文件。当您声明文件时,您会说...

var file = File("turma.dat")

改为使用类似...

var file = File(this.filesDir, "turma.dat")

看看是否有帮助。阅读Saving Files 以更好地掌握如何在 Androidl 中处理文件

顺便说一句,使用调试器并单步执行并验证file.exists 是否返回了您所期望的结果。 (如果您不知道如何使用调试器,请先学习如何使用)。

【讨论】:

  • 我尝试应用您所说的更改,现在尝试打开应用时,它崩溃了。
  • 这可能是进步。有什么例外?您可以将代码包装在 try/catch 块中并打印异常。
  • 致命异常:主进程:com.example.thial.estudandokotlin,PID:10306 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.thial.estudandokotlin/com.example.thial .estudandokotlin.MainActivity}: java.io.EOFException
  • 那是日志猫
  • EOFException - 文件结尾或空文件,如果您在运行代码之前留下了一个空文件,那么您可能有一个坏文件。删除文件(显式删除或卸载您的应用),然后重试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多