0

みなさん、こんにちは:]ストリームを閉じて最初からやり直すことなく、異なるクラスのファイルから読み書きできるかどうか疑問に思っていますか?

と を使用する必要がDataOutputStreamありDataInputStreamます。私は現在 2 つのクラスを持っています。最初のクラスはすべてのオブジェクトをファイルに書き込むことになっています。それがどんな種類のオブジェクトであるかによります。オブジェクトを別のクラスに送信し、そこで書き込みを続けます。

問題は、ストリームが閉じられる前に1つのオブジェクトを書き込むだけで、次のオブジェクトを書き続けることができないか、各オブジェクトが最後のオブジェクトを上書きすることです。

    public int skrivTilFil( String filnavn)
  {
      try{DataOutputStream input = new DataOutputStream(new FileOutputStream(filnavn)))
      {
          Bok løper = første;
          {
              while(løper != null)
              {
                  if(løper instanceof Skolebok)
                  {
                      Skolebok bok = (Skolebok) løper;
                      bok.skrivObjektTilFil(input);
                  }

                  løper = løper.neste;
              }
          }
      }
  }




public void skrivObjektTilFil(DataOutputStream output) // skolebok class
         {
             try
             { 
                            output.writeUTF("Skolefag");
                output.writeInt(klassetrinn);
                output.writeUTF(skolefag);
                super.skrivObjektTilFil(output);
             }catch(IOException e)
             {               
                            System.out.println("General I/O exception: "
                            e.getMessage());e.printStackTrace(); 
                        }
         }

ここでIOExceptionは、ストリームが閉じられているため、次のオブジェクトに進むことができませんがDataOutputStream、2 番目のクラスに設定すると、各オブジェクトが上書きされます。この問題の簡単な解決策はありますか?

4

2 に答える 2

2

に追加する必要がありますFileOutputStream

次のように作成を変更する必要があります。

...                                                                           
try{DataOutputStream input =                                  //append
            new DataOutputStream(new FileOutputStream(filnavn,true)))
...
于 2013-02-15T16:06:13.363 に答える
0

他のオブジェクトを渡す場合と同様に、あるクラス/メソッドから別のクラス/メソッドに DataOutputStream を渡すことができます。閉じられていない限り、渡した任意のクラス/メソッドから書き込みを続けることができます。ベスト プラクティスとして、DataOutputStream を開く責任があるクラスは、それを閉じる責任がある必要があります。

于 2013-02-15T16:47:19.950 に答える