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