0

以下のコードは IOException を返します。これが私のメインです:

public class Main 
{

    public static void main(String[] args) {

 Book b1 = new Book(100, "The Big Book of Top Gear 2010", "Top Gear",
                "BBC Books", 120, "Book about cars.");

 Book b2 = new Book(200, "The Da Vinci Code", "Dan Brown", "Vatican", 450,
                "A fast paced thriller with riddles.");

 Book b3 = new Book(300, "Le Petit Nicolas", "Sempe Goscinny", "Folio", 156,
                "The adventures of petit Nicolas.");

 ArrayList<Book> biblia = new ArrayList<Book>();

 biblia.add(b1);

 biblia.add(b2);

 biblia.add(b3);

 File f = new File("objects");

        try {

            FileInputStream fis = new FileInputStream("objects");

            int u = fis.read();

            if (u != -1) {

                ObjectInputStream ois = new ObjectInputStream(fis);

                Bookstore b = (Bookstore) ois.readObject();

                ois.close();

            } else {

                Bookstore b = new Bookstore(biblia);

                FileOutputStream fos = new FileOutputStream("objects");

                ObjectOutputStream oos = new ObjectOutputStream(fos);

                oos.writeObject(b);

                oos.close();

            }

        } catch (FileNotFoundException ex1) {

            System.out.println("File not found.");

        } catch (IOException ex2) {

            System.out.println("IO Error.");

        } catch (ClassNotFoundException ex3) {

            System.out.println("Class not found.");

        }

}

これは Bookstore クラスで、Book オブジェクトの ArrayList をオブジェクト ストリームで使用するために格納するためだけに使用します。

public class Bookstore implements Serializable {


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

    public Bookstore(ArrayList<Book> biblia) {

        myBooks = biblia;

    } 

}

適切なライブラリもすべてインポートしました。私がやろうとしていることは次のとおりです。ファイルが空でない場合は、そこからArrayListを読み取ります(arraylistを含むbookstoreオブジェクト)。空の場合は、新しいものを書きます。問題は、返されるのは「IO エラー」だけだということです。理由がわかりません。

4

3 に答える 3

2

ファイルが存在するかどうかをテストするのは間違った方法です。存在しないファイルからストリームを作成しようとすると、FileNotFoundExceptionがスローされます。それ以外の:

FileInputStream fis = new FileInputStream("objects");            
int u = fis.read();
if (u != -1) {

使用するだけ

if(f.exists()) { ... }
于 2011-01-20T01:35:05.077 に答える
1

例外が発生したときにスタック トレースを出力すると、これらの問題をデバッグするのに役立ちますが、Book はシリアル化できないと推測しています。

于 2011-01-20T01:31:19.543 に答える
0

Nightsorrowはおそらく正しいです。「IOエラー」が発生する理由に答えるには、IOエラーが発生した場合にそれを出力するようにプログラムに指示したためです。コードをデバッグする目的で、私は削除します

catch (IOException ex2) {

        System.out.println("IO Error.");

    }

コードのセクションを削除するか、コメントアウトして、スタック トレースを取得できるようにします。次に、例外とその例外がスローされた行が表示されるため、エラーが発生している場所と理由を特定できます。

于 2011-01-20T01:45:37.723 に答える