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

4
我看过使用这种方法写入内部存储的方式。
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();
        }

    }

我想把 theObject 放到某个新的指定目录中。
然后在该目录中搜索所有.ser文件,并对每个对象进行反序列化。
所以基本上,你会如何做呢?

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


https://dev59.com/Vm445IYBdhLWcg3wJ258 - Ali Imran
你想为内部存储文件创建目录吗? - kumar_android
本质上是的。然而,上述代码不允许您为正在编写的对象创建或更改目录。我认为OpenFileOutput()不能满足我想要做的事情。 - Steven Akerfeldt
1个回答

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接