0
このオブジェクト、インベントリを内部ストレージに保存しようとしています。クラスそのものにメソッドを保存したり取得したりしています。 saveメソッドを呼び出そうとすると、例外が発生します。 オブジェクトを書き込めません。読み取り専用ファイルシステム
に
/テスト(読み取り専用ファイルシステム):私はLogcatに例外メッセージの書き込みがあったが、ここで私が得たものです:08-04 02:32:23.690:VERBOSE /アレックス(278)ファイル/テスト「読み取り専用のファイルシステム」であるが、私はマニフェストファイル内の外部ストレージを書く許可していた:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
ここでインベントリクラスです。最後の2つのメソッドは、保存メソッドと読み取りメソッドです。
package com.androidbook.inventoryproject;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import android.util.Log;
public class Inventory implements Serializable {
private static final long serialVersionUID = 1L;
int numIngred;;
Ingredient[] ingredients;
ArrayList ingred = new ArrayList<Ingredient>();
public Inventory() {
numIngred = 0;
ingredients = new Ingredient[numIngred];
}
public int getNumIngred() {
return numIngred;
}
public String getIngredientName(int n) {
return ((Ingredient)ingred.get(n)).getName();
}
public Ingredient[] getIngredients() {
return ingredients;
}
public Ingredient getIngredient(int n) {
return (Ingredient)ingred.get(n);
}
public void addIngredient(String iname) {
numIngred++;
ingred.add(new Ingredient(iname));
}
public boolean saveInventory(Inventory inv) {
File suspend_f = new File("test");
FileOutputStream fos = null;
ObjectOutputStream oos = null;
boolean keep = true;
try {
fos = new FileOutputStream(suspend_f);
oos = new ObjectOutputStream(fos);
oos.writeObject(inv);
}
catch (Exception e) {
keep = false;
Log.v("alex", "" + e.getMessage());
}
finally {
try {
if (oos != null) oos.close();
if (fos != null) fos.close();
if (keep == false) suspend_f.delete();
}
catch (Exception e) { /* do nothing */ }
}
return keep;
}
public Inventory getInventory() {
File suspend_f = new File("test");
Inventory inven = null;
FileInputStream fis = null;
ObjectInputStream ois = null;
try{
fis = new FileInputStream(suspend_f);
ois = new ObjectInputStream(fis);
inven = (Inventory)ois.readObject();
}
catch (Exception e) {
String mess = e.getMessage();
}
finally {
try {
if (fis != null)
fis.close();
if (ois != null)
ois.close();
}
catch (Exception e) { }
}
return inven;
}
}
ああ、私は実際にファイルシステムのルートに書きたいと思っています。それ、どうやったら出来るの?ありがとう! –
できません。基本的には、アプリのプライベートストレージエリアと外部ストレージにのみ書き込むことができます。 –
@Chrisが正しいです。おそらくあなたがデバイスをルートし、ルートパーティションの読み取り専用の性質を変更した場合、それを行うことはできますが、変更されていないAndroidデバイスでは実行できません。あなたはおそらく、あなたが具体的にルートに書き込む必要がありますか? – Femi