如何将HashMap保存到文件并加载它

时间:2013-03-26 18:33:15

标签: java android file save

我遇到了一个重大问题。我想将HashMap(我称之为'map'或'hm')保存到运行应用程序的android设备上的文件中。我确实想把它保存在内部存储器上。

我知道像这样的问题之前被问过100次,我尝试了其中的25个,但没有一个有效。

我有3个类,一个扩展'Activity'的主类和另外两个类,一个叫'util'。我想编写两个方法来保存和加载HashMap,这两个方法都应该在'util'类中。在主类中,我编写了几个方法来加载HashMap,在其中加入一些东西,然后再次保存。

直到这里解决我的问题应该不难,但我想在除主类之外的其他类中使用'save'和'load'方法。

我不知道如何将其他类中的Context对象作为主类,所以我不知道如何调用openFileOutput()方法。

总结:我想在我想要在内部存储上创建的文件中保存和加载HashMap。我使用的方法应该位于'util'类中,并且应该可以访问所有其他类,首选静态方式。我尝试了很多不同的可能性,但我总是得到'FileNotFoundException'。我希望你能帮助我。

我使用的一些方法:

        try {
        FileOutputStream fos = c.openFileOutput(s, Context.MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(hm);
        oos.flush();
        oos.close();
        fos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

在这种方法中我必须使用Context,我不知道如何在其他类中获取它。我也得到'FileNotFoundException'......

String file = The path where my file should be located (I don't know how it should be given, but "data/data/[packagename]/[file]" does not work)

        try {
        FileOutputStream fos = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(hm);
        oos.flush();
        oos.close();
        fos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

这个方法也不起作用,我真的不知道我得到了哪个例外。

最后:如果你想帮助我,请描述如何获取你使用的每个对象(好吧,除了像字符串这样的基本内容......)并粘贴整个解决方案。如果以前问过这个问题,我真的很抱歉,我找不到它。

修改

我尝试使用'this.getApplicationContext()。getFilesDir()'方法但仍然得到'FileNotFoundException'...不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

如果您始终通过可以访问Util的类调用Activity - 方法,只需在方法调用中添加Context作为参数。

否则,您可以创建一个全局Application - 对象,您可以从中获取上下文。此特定上下文不支持创建视图和其他依赖于活动的选项,但openFileOutput() / openFileInput() - 方法应该没问题,因为目录位于应用程序级别。

为此,您将创建一个Application子类,并为其自身提供静态引用:

//In the Application subclass:
static MyApplication instance;
onCreate(){
    super.onCreate();
    instance = this;
}
public static final MyApplication getInstance(){
    return instance;
}

然后你可以调用MyApplication.getInstance();来获得一个上下文。

您还必须在清单中添加您的应用程序类(在application-tag下使用name-attribute)。

相关阅读: Singletons vs ApplicationContext in android