android - 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。我一直无法找到解决此问题的方法。有人可以给我一些提示,说明我会得到这个例外的原因。是否可能需要将某种类型的权限添加到我不知道的清单文件中?
解决方案
请参阅此处的文档 - https://developer.android.com/reference/java/io/ObjectOutputStream
只有支持 java.io.Serializable 接口的对象才能写入流。
因此,您必须为 Alarm 类实现 Serializable 接口,并且它的所有字段也必须是 Serializable 才能使用 ObjectOutputStream。
您可以从文档中找到更多信息。
其他参考资料
推荐阅读
- ios - 显示 IAP 页面前的收据验证
- c# - Linq 进入数组,然后在数组中查找值并列出到组合框
- laravel - Laravel 5.5 Storage::url() 不使用 S3 返回所需的 url
- apache-spark - 为什么Spark强调schema、mem、storage解耦?
- objective-c - [NSKeyedArchiver archivedDataWithRootObject:在目标 c 上崩溃
- javascript - 如何使用 jquery 在页面加载时生成动态下拉列表?
- express - 在浏览器端缓存 Express REST 路由
- java - AttributeConverter convertToEntityAttribute 循环记录并总是得到空值?
- javascript - 如何从 lodash 获取对象值?
- c# - 空引用在 C# 中基本上是全零指针吗?