我是Android编程的新手,所以我的问题的答案很有希望。
我有一个应用程序可以从通过网络连接的PC程序接收文件。然后,此文件将在内部存储并由应用程序使用。当应用程序启动时,它会读取文件(这是类' WordList'它基本上是一个HashMap)的序列化实例,并将数据显示给用户。在任何时候,pc程序都可以将新文件发送到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
}
问题是应用程序在启动时无法找到该文件。如果我从电脑发送一个新文件,它将被正确接收和使用,没有错误消息。但是,如果我重新启动应用程序,则找不到,我会收到来自“其他”的错误消息。最后一个代码块的一部分。我忘记了什么?
答案 0 :(得分:3)
new File(getFilesDir() + "save.dat")
应该是
new File(getFilesDir(), "save.dat")
最后一个将文件分隔符追加到getFilesDir()
和"save.dat"
的返回值
而不是使用
new FileInputStream(getFilesDir() + "save.dat")
我们
openFileInput("save.dat")
here您可以找到文档
答案 1 :(得分:0)
您可以查看save.dat在磁盘上的位置。
我的假设是将保存更改为:
ObjectOutputStream oos = new ObjectOutputStream(
openFileOutput(getFilesDir() + "save.dat", Context.MODE_PRIVATE));