2011-08-04 33 views
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; 
    } 
} 

答えて

2

WRITE_EXTERNAL_STORAGEファイルシステムのルートではなく、SDカードに書き込むことができます。これを試してください:

File suspend_f = new File(Environment.getExternalStorageDirectory(), "test"); 

これは、書き込み可能な外部フォルダに移動することを確認します。

EDIT:SDカードが使用可能で書き込み可能であることを確認するために、他にも作業が必要です。可用性を確認してファイルアクセスを堅牢にする方法については、specsをご覧ください。

+0

ああ、私は実際にファイルシステムのルートに書きたいと思っています。それ、どうやったら出来るの?ありがとう! –

+0

できません。基本的には、アプリのプライベートストレージエリアと外部ストレージにのみ書き込むことができます。 –

+0

@Chrisが正しいです。おそらくあなたがデバイスをルートし、ルートパーティションの読み取り専用の性質を変更した場合、それを行うことはできますが、変更されていないAndroidデバイスでは実行できません。あなたはおそらく、あなたが具体的にルートに書き込む必要がありますか? – Femi

関連する問題