gpt4 book ai didi

java - 保存在 getFilesDir() 中的文件在应用重启时丢失

转载 作者:可可西里 更新时间:2023-10-31 22:03:34 27 4
gpt4 key购买 nike

我是 Android 编程的新手,所以我的问题的答案希望很简单。

我有一个应用程序可以从通过网络连接的电脑程序接收文件。该文件然后在内部存储并由应用程序使用。当应用程序启动时,它会读取文件(它是类“WordList”的序列化实例,它基本上是一个 HashMap)并将其中的数据显示给用户。在任何时候,pc 程序都可以向 android 设备发送一个新文件,android 设备接收该文件并覆盖内存中的旧文件。

文件是这样接收和存储的:

try(ServerSocket serverSocket = new ServerSocket(port)){

Socket pc = serverSocket.accept();
ObjectInputStream ois = new ObjectInputStream(pc.getInputStream());
list = (WordList)ois.readObject();
ois.close();
pc.close();

}catch(IOException | ClassNotFoundException e){
//Display error message and stuff
}

try {
ObjectOutputStream oos = new ObjectOutputStream(
openFileOutput("save.dat", Context.MODE_PRIVATE));
oos.writeObject(list);
oos.flush();
oos.close();
} catch (IOException e) {
//Display error message and stuff
}

当应用程序启动时,它会像这样读取文件:

if (new File(getFilesDir() + "save.dat").exists()) {

try {
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream(getFilesDir() + "save.dat"));
WordList list = (WordList)ois.readObject();

/*Now set a reference to the list object so it can be used by the app,
then start displaying stuff to the user...*/
ModelController.getInstance().setList(list);
ModelController.getInstance().start(this);
}catch(IOException | ClassNotFoundException e){
//Display error message and stuff
}
}else{
//Display error message and stuff
}

问题是应用程序启动时找不到文件。如果我从电脑发送一个新文件,它会被正确接收和使用,没有错误消息。但是,如果我重新启动找不到的应用程序,我会从最后一个代码块的“其他”部分收到错误消息。我忘记了什么?

最佳答案

new File(getFilesDir() + "save.dat")

应该是

new File(getFilesDir(), "save.dat")

最后一个在 getFilesDir()"save.dat" 的返回值之间附加了文件分隔符

而不是使用

  new FileInputStream(getFilesDir() + "save.dat")

我们

openFileInput("save.dat")

here你可以找到文档

关于java - 保存在 getFilesDir() 中的文件在应用重启时丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31002838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com