尝试将文件加载到主活动的onCreate中

时间:2017-09-23 23:52:09

标签: android file kotlin

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

MainActivity:

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()
}

1 个答案:

答案 0 :(得分:2)

file.exists()是probalby不看你期望的地方。方法openFileInputopenFileOutput处理应用程序私有位置中的文件。当你声明文件时,你说...

var file = File("turma.dat")

取而代之的是......

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

看看是否有帮助。阅读Saving Files以更好地掌握如何使用Androidl中的文件

顺便说一句,使用调试器并逐步执行并验证file.exists是否返回您期望的内容。 (如果你不知道如何使用调试器,那么首先要学习如何)。