首页 > 解决方案 > Android studio 内部存储 FileOutputStream FileNotFound

问题描述

我正在使用 android studio,我想在内部存储中写入/存储一个文件。我知道堆栈溢出有几个这样的问题。我已经设法从那些那里得到这个代码。

public static void writeObj(Alarm alarm, Context context){
    FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        try{
            fos = new FileOutputStream("ArrayList.txt", true);
            oos = new ObjectOutputStream(fos);
            oos.writeObject(alarm);
            oos.flush();
            oos.close();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
             e.printStackTrace();
        }

这段代码对我不起作用。我设法弄清楚我收到了 FileNotFound 异常,因为 FileOutputStream 无法创建我的文件。所以我做了更多的挖掘并将其添加到我的 try/catch 之上(在 FileOpenOutputStream 中用 f 替换“ArrayList.txt”)。

    File f = new File(context.getFilesDir(),"ArrayList.txt");
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }

这为我创建了文件,让我通过了 FileNotFound 异常捕获,但现在我得到了一个 IOException。我一直无法找到解决此问题的方法。有人可以给我一些提示,说明我会得到这个例外的原因。是否可能需要将某种类型的权限添加到我不知道的清单文件中?

标签: androidioexceptionfileoutputstream

解决方案


请参阅此处的文档 - https://developer.android.com/reference/java/io/ObjectOutputStream

只有支持 java.io.Serializable 接口的对象才能写入流。

因此,您必须为 Alarm 类实现 Serializable 接口,并且它的所有字段也必须是 Serializable 才能使用 ObjectOutputStream。

您可以从文档中找到更多信息。

其他参考资料

序列化 Java:哪些类需要“实现 Serializable”?

https://stackoverflow.com/a/28789107/9640177


推荐阅读