在android中将对象写入内部存储(在新目录中)

时间:2012-12-08 15:35:18

标签: android serialization android-sdcard outputstream objectoutputstream

我已经看过如何使用这种方法写入内部存储器。

public void storeSerializedObject(MyObject theObject) {



        FileOutputStream fileOut = null;
        String fileName = theObject.getName();
        try {


            fileOut = context.getApplicationContext().openFileOutput(
                    fileName + ".ser", Context.MODE_PRIVATE);
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(theObject);
            out.close();
            fileOut.close();

        } catch (IOException i) {
            i.printStackTrace();
        }

    }

问题是我想将对象放在一些新的指定目录中。 然后最终在该目录中搜索所有.ser文件,并反序列化每个对象 所以基本上,你会怎么做?

另外,使用上述文件存储方法,有没有办法检查其内容中所有文件名列表的默认未命名位置?

1 个答案:

答案 0 :(得分:0)

Context有几种获取内部文件和目录的方法,您可能希望使用Context#getDir()

getDir("serfiles", Context.MODE_PRIVATE)应该会生成一个名为
的目录 /data/data/your.package.name/app_serfiles

要列出其中的文件,请使用File#list()File#listFiles()。如果您只想要特定的文件,请将其与过滤器结合使用

private static File[] listSerFiles(Context context, String dirName) {
    File dir = context.getDir(dirName, Context.MODE_PRIVATE);
    return dir.listFiles(SER_FILTER);
}
private static final FileFilter SER_FILTER = new FileFilter() {
    public boolean accept(File file) {
        return file.isFile() && file.getName().endsWith(".ser");
    }
};

你可以打开像

这样的输出流
private static FileOutputStream getOutputStreamInDir(Context context, String dirName, String fileName) throws FileNotFoundException {
    File dir = context.getDir(dirName, Context.MODE_PRIVATE);
    File file = new File(dir, fileName);
    return new FileOutputStream(file);
}