2

次のコードがあり、配列を .data ファイルに格納しようとしています。問題は、これを行う方法がわからないことです。ファイルを作成しようとすると、filenotfoundException が発生します。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class SimpleBookManager implements BookManager, java.io.Serializable {

    private ArrayList<Book> allBooks = new ArrayList<Book>();


    public ArrayList<Book> getAllBooks(){
        return  allBooks;
    }

    public void saveChanges(){
        try{
            FileOutputStream f_out = new FileOutputStream("myobject.data");
            // Write object with ObjectOutputStream
            ObjectOutputStream obj_out = new
                ObjectOutputStream (f_out);

            // Write object out to disk
            obj_out.writeObject(allBooks);
        }catch (FileNotFoundException e) {
            System.out.println("No file found saveChanges");//Why can't I create a new "myObject.data"?
        } catch (IOException e) {
            //someCode();
        } 
    }

    public void loadBooks(){
        try{
        // Read from disk using FileInputStream
        FileInputStream f_in = new 
            FileInputStream("myobject.data");

        // Read object using ObjectInputStream
        ObjectInputStream obj_in = 
            new ObjectInputStream (f_in);

        // Read an object
        Object obj = obj_in.readObject();

        if (obj instanceof ArrayList<?>)
        {
            // Cast object to a Vector
            allBooks = (ArrayList<Book>) obj;
            System.out.println("Worked");

        }
        }catch (FileNotFoundException e) {
            System.out.println("No file found LoadBooks");
        } catch (IOException e) {
            //someCode();
        } 
        catch (ClassNotFoundException e) {
            //someCode();
        }

    }


      public static SimpleBookManager getSimpleBookManager()
      {
        if (ref == null){
            ref = new SimpleBookManager();
        }

        return ref;
      }

    public SimpleBookManager(){

    }
}

問題は、作成しようとしたときと後でそれを読み取ろうとしたときに filenotfound 例外がスローされることです。なぜですか? Android エミュレーターで .data ファイルを作成できませんか? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ___ _ _ _ _ _ _ _ _

ここに私のマニフェストを編集<uses permission>し、ファイルの最後に追加しましたが、それでもファイルを作成できません

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="edu.chalmers.BookApp"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="16" />

    <application
        android:icon="@drawable/ic_launcher"

        >
        <activity
            android:name=".BookApp"
            android:label="@string/title_bookapp"
            android:uiOptions="splitActionBarWhenNarrow" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
            <activity
        android:name=".AddBookActivity"
        android:uiOptions="splitActionBarWhenNarrow" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="edu.chalmers.BookApp" />
    </activity>
     <activity
        android:name=".DetailActivity"
        android:uiOptions="splitActionBarWhenNarrow" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="edu.chalmers.BookApp" />
    </activity>
     <activity
        android:name=".EditBookActivity"
        android:uiOptions="splitActionBarWhenNarrow" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="edu.chalmers.BookApp" />
    </activity>

    </application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
</manifest>
4

1 に答える 1

1

saveChanges()パラメータとして aを取るようにメソッドを変更しContextます...

public void saveChanges(Context context) {...}

次に、saveChanges(...)この行を変更してみてください...

FileOutputStream f_out = new FileOutputStream("myobject.data");

...に...

FileOutputStream f_out = context.openFileOutput("myobject.data", Context.MODE_PRIVATE);

また、にを渡し、ContextこのloadBooks(...)行を変更します...

FileInputStream f_in = new FileInputStream("myobject.data");

...に...

FileInputStream f_in = context.openFileInput("myobject.data");

からいずれかのメソッドを呼び出すときは、コンテキストとしてActivity使用thisします。例...

myBookManager.saveChanges(this);
myBookManager.loadBooks(this);
于 2012-11-17T21:08:49.663 に答える