将序列化对象存储为sdcard作为导致FileNotFoundException的文件

时间:2012-06-18 09:25:10

标签: android serialization filenotfoundexception objectoutputstream

我想序列化一个对象并将其存储在我的项目名称下的sdcard内,但我得到FileNotFoundException

我的代码如下:

FileOutputStream fileOutputStream = null;
ObjectOutputStream objectOutputStream = null;

File dir = new File(Environment.getExternalStorageDirectory(), FILE_LOCATION + username);

try {
    if(!dir.exists()) {
        dir.mkdirs();
    }
    File file = new File(dir, FILE_NAME);
    fileOutputStream = new FileOutputStream(file);
    objectOutputStream = new ObjectOutputStream(fileOutputStream);
    objectOutputStream.writeObject(formList);
    objectOutputStream.close();
} catch(IOException ioException) {
    ioException.getMessage();
} catch (Exception e) {
    e.getMessage();
}

这个问题的原因是什么?
我在模拟器中运行,我的应用程序在android 3.0中。

3 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我,但是你不必在写信之前创建文件吗?

File file = new File(dir, FILE_NAME);
if (!file.exists()) {
    file.createNewFile();
}

答案 1 :(得分:0)

我怀疑你的文件名无效,也许是。在目录中?或文件名自己。

答案 2 :(得分:0)

我想分享我的解决方案,因为我在Stackoverflow上得到了很多关于这个问题的帮助(通过搜索以前的答案)。我的解决方案导致了几个小时的搜索和拼凑解决方案。我希望它有所帮助。

这将在外部存储中写入和读取自定义对象的ArrayList。

我有一个类为我的活动和其他类提供IO。警报是我的自定义类。

@SuppressWarnings("unchecked")
public static ArrayList<Alarm> restoreAlarmsFromSDCard(String fileName,
        Context context) {

FileInputStream fileInputStream = null;

ArrayList<Alarm> alarmList = new ArrayList<Alarm>();//Alarm is my custom class
//Check if External storage is mounted
if (Environment.getExternalStorageState() != null) {
File dir = new File(Environment.getExternalStorageDirectory(),
                "YourAppName/DesiredDirectory");

try {
if (!dir.exists()) {
Log.v("FileIOService", "No Such Directory Exists");
}
File file = new File(dir, fileName);
fileInputStream = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fileInputStream);
alarmList = (ArrayList<Alarm>) ois.readObject();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
} else {
//Do something here to warn user
}

return alarmList;
}

public static void saveAlarmsToSDCard(String fileName, ArrayList<Alarm>     alarmList,Context context) {
FileOutputStream fileOutputStream = null;
ObjectOutputStream objectOutputStream = null;

if (Environment.getExternalStorageState() != null) {
File dir = new File(Environment.getExternalStorageDirectory(),
                "YourAppName/DesiredDirectory");

try {
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, fileName);
fileOutputStream = new FileOutputStream(file);
objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(alarmList);
objectOutputStream.close();
} catch (IOException ioException) {
ioException.getMessage();
} catch (Exception e) {
e.getMessage();
}
}else{
//Do something to warn user that operation did not succeed
}

}