我正在开发一个应用程序,我想在一个文件中有一个 ArrayList。我写了两种方法来保存和获取:
public static boolean saveMetars(Context context, ArrayList<Metar> metars) {
try {
FileOutputStream fos = context.openFileOutput("metars_array", Context.MODE_WORLD_READABLE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(metars);
oos.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public static ArrayList<Metar> getArrayMetars(Context context) {
try {
Log.d("here", "asas");
FileInputStream fis = context.openFileInput("metars_array");
ObjectInputStream is = new ObjectInputStream(fis);
Object readObject = is.readObject();
is.close();
if(readObject != null && readObject instanceof ArrayList) {
Log.d("here2", "asas");
return (ArrayList<Metar>) readObject;
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
我的问题是:当用户安装应用程序并第一次使用它时,我有一个 xml 文件,我使用一种方法(在我的 appi 中创建)来读取它并创建 Metar 对象以添加到我的 ArrayList 中。问题是我想要一个 if 语句或类似的东西来控制文件是否
context.openFileOutput("metars_array", Context.MODE_WORLD_READABLE) 存在。
我做了
if(getApplicationContext().getDir("metars-array", MODE_WORLD_READABLE).exists() || getBaseContext().getDir("metars-array", MODE_WORLD_READABLE).exists()){
ArrayList<Metar> mets = getArrayMetars(getBaseContext());
isMetarsInDb=true;
}
else
isMetarsInDb=false;
错误是它总是在第一个 if 和当我这样做时输入
ArrayList mets = getArrayMetars(getBaseContext());
它返回一个错误说
文件“/data/data/android.altmeter.com/app_metars_array”(未找到文件)
我想这样做是因为如果文件不存在(用户第一次使用该应用程序并且他从未序列化数组列表)我必须使用从 XML 读取的方法然后序列化到 metars_array 文件。