2017-09-23 21 views
0

我想要做的是测试如果文件“turma.dat”已经存在,如果存在我只是打开它,如果它不存在,我创建一个新的文件并保存。当我第一次创建该文件时启动该应用程序,但每次我再次启动该应用程序时,该文件都将以白色创建。试图加载文件到主要活动的onCreate

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

你是什么意思的“创建在白色”? – Les

+0

该文件为空。 –

+0

so'File.exists(“turma.dat”)'返回true?你有调试器通过代码? – Les

回答

0

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

var file = File("turma.dat") 

而是使用类似...

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

看看是否有帮助。阅读Saving Files得到的如何使用文件Androidl

工作顺便说一句,使用调试器和单步调试和验证file.exists回报你的期望更好地把握。 (如果你不知道如何使用调试器,那么从学习如何开始)。

+0

我试图应用您所说的更改,现在尝试打开应用程序时会崩溃。 –

+0

这可能是进步。什么是例外?你可以将你的代码包装在try/catch块中并打印异常。 – Les

+0

致命例外:main 进程:com.example.thial.estudandokotlin,PID:10306 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.thial.estudandokotlin/com.example.thial.estudandokotlin.MainActivity} :java.io.EOFException –