Java 应用程序重新启动时,保存在GetFileDir()中的文件丢失

Java 应用程序重新启动时,保存在GetFileDir()中的文件丢失,java,android,Java,Android,我是android编程新手,所以我的问题的答案希望很简单 我有一个应用程序,可以从通过网络连接的pc程序接收文件。然后,该文件存储在内部并由应用程序使用。当应用程序启动时,它读取文件(这是类“WordList”的序列化实例,基本上是一个HashMap),并向用户显示其中的数据。在任何时候,pc程序都可以向android设备发送一个新文件,android设备接收该文件并覆盖内存中的旧文件 文件的接收和存储方式如下: try(ServerSocket serverSocket = new Serve

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

我有一个应用程序,可以从通过网络连接的pc程序接收文件。然后,该文件存储在内部并由应用程序使用。当应用程序启动时,它读取文件(这是类“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
 }
问题是应用程序启动时找不到文件。如果我从电脑发送一个新文件,它将被正确接收和使用,没有错误消息。但是,如果我重新启动应用程序,但找不到它,我会从最后一个代码块的“else”部分收到错误消息。我忘了什么

new File(getFilesDir() + "save.dat")
应该是

new File(getFilesDir(), "save.dat")
最后一个在返回值
getFilesDir()
“save.dat”

而不是使用

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


您可以找到文档

您可能可以检查save.dat在磁盘上的位置

我的假设是将保存更改为:

ObjectOutputStream oos = new ObjectOutputStream(
                     openFileOutput(getFilesDir() + "save.dat", Context.MODE_PRIVATE));
ObjectOutputStream oos = new ObjectOutputStream(
                     openFileOutput(getFilesDir() + "save.dat", Context.MODE_PRIVATE));