2011-07-25 2 views
-1

私は1単語しか保存しない単純なtxtファイルを持っていますが、プログラムを再起動するたびにdata.txt内のすべてが削除されます - なぜわかりませんか?プログラムを再起動するたびにこのdata.txtファイルが削除されるのはなぜですか?

全体のクラスコード:このため、ラインの

import java.io.DataInputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.PrintStream; 

public class InfoSaver { 
    File data = new File("data.txt"); 
    FileOutputStream fos; 
    PrintStream writer; 
    FileInputStream fis; 
    DataInputStream reader; 
    public void init() throws IOException{ 
     fos = new FileOutputStream(data); 
     writer = new PrintStream(fos); 
     fis = new FileInputStream(data); 
     reader = new DataInputStream(fis); 

    } 
    public void writeData(String info) { 
     writer.println(info); 

    } 
    public String readData() throws IOException{ 
     return reader.readLine(); 
    } 
    public void close() throws IOException{ 
     writer.close(); 
     reader.close(); 
    } 
} 
+1

あなたのプログラムを実行するたびに、既存のファイルを新しいファイルに上書きするので、 –

答えて

0

ファイルに新しい情報を追加していないため、上書きしています。

いつでもあなただけ

FOS =新しいのFileOutputStream(データ)で開きます。

コマンドを使用すると、その中に何かを保存したかどうかに関係なく、空になります。

2

fos = new FileOutputStream(data); 

This version of the constructor of FileOutputStreamがファイルをoverwiteますが、あなたはthis versionを使用することができます。

public FileOutputStream(File file, 
         boolean append) 
       throws FileNotFoundException 

あなたは思いますを設定してファイルに追加することを指定する必要がありますフィールドからtrueになります。

5

上書きするのではなく既存のファイルに追加するには、追加モードで開くことができるFileOutputStreamのコンストラクタを使用します。

fos = new FileOutputStream(data, true); 
0

FileOutputStreamがファイルを上書きしています。あなたが予期しない動作が発生したとき

fos = new FileOutputStream(data, true); 

それはあなたが期待するものをやっている呼んでいる機能を確保するためのAPIをチェックすることをお勧めします:あなたは、ファイルの末尾に追加したい場合は、ように指定する必要があります。コンストラクタFileOutputStreamの場合はHere is the APIです。

+0

問題を解決しました。 – Rev3rse

+0

嬉しいです!回答の横にあるチェックマークをクリックして回答を受け入れてください。また、有益な回答をupvoteしてください。 – Paul

関連する問題