2017-04-10 17 views
0

Array Listを使用してファイルにオブジェクトを書き込む方法を知りたいが、プログラムを再起動するとファイルは上書きされ続け、データは保持されない。ArrayListを使用してファイルにオブジェクトを追加する

System.out.println("Enter DVD title: "); 
String title = inputScanner.nextLine(); 
System.out.println("Enter main actor: "); 
String actor = inputScanner.nextLine(); 
System.out.println("Enter DVD's release year: "); 
String yearOfRelease = inputScanner.nextLine(); 
newDVD = new DVD(title, actor, yearOfRelease); 
System.out.println("Entered DVD details: "); 
DVDCollection.add(newDVD); 
writeDVDs(DVDCollection); 
break; 

上記のコードは、ユーザーからの入力を受け取り、ArrayListに格納します。

プログラムを再起動すると、すべてが消去されるようです。

static void writeDVDs(ArrayList<DVD> DVDs) throws Exception { 
    try { 
     Boolean append = true; 
     FileOutputStream fileOutputStream = new FileOutputStream("DVDCollection.dat", append); 
     ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); 
     for (int i = 0; i < DVDs.size(); i++){ 
      DVD theDVD = DVDs.get(i); 
      objectOutputStream.writeObject(theDVD); 
      System.out.println("DVD successfully saved"); 
     } 
    } 
    catch (Exception e){ 
     System.out.println("Cant write data to file"); 
    } 
} 
+0

私の答えは再び更新されました。いくつかのフィードバックは歓迎されるでしょう... – GhostCat

+0

リスト全体を書きます。あなたはそれを繰り返す必要はありません。しかし特別な対策を取らずにオブジェクトストリームに追加することはできません。 – EJP

+0

フィードバックのおかげで、私はプログラミングには良いと主張していませんでしたが、これは助けになります –

答えて

2

いいえ、ありません。

FileOutputStreamのコードには、書き込み後のコードがありません。コンテキストによっては、状況が非常に矛盾した状態になることがあります。

もちろん、Java7では、自動的にストリームを閉じるにはtry-with-resourcesにするだけです。そしてヒント:System.out.println("Cant write data to file")は、基本的に正確な問題ののの詳細をすべてスローします。例外自体も印刷したい!

それ以外にも、という概念があります。問題です。どのようなコードがやっている:

  • 作品1

により、そのファイルにオブジェクトを書き込むこと

  • を追加するために、ファイルを開く配列リストオブジェクト
  • ... 1を満たします。しかし、それほど正確ではありません。分かりますか;これらの値を読み取るためには、ファイル内のエントリの数をどのように知っていますか?

    私はむしろに提案したいと思います。単純に完全なリストオブジェクト自体を書きます。しかし、もちろん、それは全体的なソリューションを手直しするために必要となる - などの例:

    • あなたの方法最初は、現在のファイルに格納されているリストを読み込ん
    • あなたがそのリスト
    • に新しいオブジェクトを追加
    • あなたはそのリストをファイルにもう一度書きます(ただし上書きはしません)。

    短いストーリー:あなたの要求が何であるか心配してください。クリーンな方法でそこに着く方法。

  • +0

    彼はリストを書くことさえしません、彼はシングルDVDを書く... – slowy

    +0

    申し訳ありません、これは私の最初の投稿、プロジェクトの理由ですユーザがDVDのリストを作成し、前記リストを記憶し、リストを編集することを可能にすることである。 P.S.私はちょうどプログラミングを始める学生、私は6ヶ月未満の経験がある –

    +0

    それは問題ではありません。しかし初心者が質問をするときは、質問が戻ってくるのが典型的です。それで、ここで質問を投げ捨てて、何時間も歩くことは大変なことではありません... – GhostCat

    関連する問題