Android studio内部存储FileOutputStream FileNotFound

Android studio内部存储FileOutputStream FileNotFound,android,ioexception,fileoutputstream,Android,Ioexception,Fileoutputstream,我正在android studio上工作,我想在内部存储器中写入/存储一个文件。我知道在堆栈溢出上有几个类似的问题。我已经设法从那些人那里得到了这个代码 public static void writeObj(Alarm alarm, Context context){ FileOutputStream fos = null; ObjectOutputStream oos = null; try{ fos = new FileOut

我正在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”)


这为我创建了文件,让我通过了FileNotFound异常捕获,但现在我得到了一个IOException。我还没有找到解决这个问题的办法。有人能告诉我为什么我会得到这个例外的一些提示吗。是否有某种类型的权限需要添加到清单文件中,我对此一无所知?

请参阅此处的文档-

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

所以,您必须为Alarm类实现可序列化接口,并且它的所有字段也必须是可序列化的,以便使用ObjectOutputStream

    File f = new File(context.getFilesDir(),"ArrayList.txt");
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
您可以从文档中找到更多信息

其他参考资料


我认为在创建
FileOutputStream
时,您应该给出完整路径。请注意,您创建的文件位于应用程序的内部存储器(
context.getFilesDir()
)中,您不需要任何额外权限。