2013-01-23 22 views
7

ファイルを1行ずつ読み込んでいますが、私の特定のパラメータに合った行が表示されるようにしようとしています。特定の単語)、私はその行を上書きすることができます。Javaでファイルを同時に読み書きする

私の現在のコード:

try { 
    FileInputStream fis = new FileInputStream(myFile); 
    DataInputStream in = new DataInputStream(fis); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
    String line; 

    while ((line = br.readLine()) != null) { 
     System.out.println(line); 
      if (line.startsWith("word")) { 
       // replace line code here 
      } 
    } 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 

... myFileFileオブジェクトです。

いつものように、どんなヘルプ、例、提案も大歓迎です。

ありがとうございます!ここ

+1

ファイルを一度に読み込み、閉じて、書き込み用に開いてから、変換を実行した後にすべての行を書き留めてみませんか? – Patashu

+1

@Patashuもしそれが大きなファイルだったら、私の提案した方法はもっとうまくいくでしょう。 – iphonedev7

+0

DataInputStreamを使用してテキストを読み取らないでくださいhttp://vanillajava.blogspot.co.uk/2012/08/java-memes-which-refuse-to-die.html –

答えて

4

あなたの最善の策は、おそらくメモリへのファイルの読み込みしようとしている(StringBuilderのようなもの)と、あなたの出力ファイルがStringBuilderに見えるようにしたいものを書きます。ファイルを完全に読み終えたら、StringBuilderの内容をファイルに書き込むことになります。

メモリ内でこれを実行するにはファイルが大きすぎる場合は、ファイルの行を1行ずつ読み込み、StringBuilderの代わりに一時ファイルに書き込むことができます。それが終わったら、古いファイルを削除して一時ファイルをその場所に移動することができます。

+0

良いアイデア...私はそれを試してみますでる。 – iphonedev7

12

RandomAccessFileが適しているようです。そのjavadocはこう言っています:

このクラスのインスタンスは、ランダムアクセスファイルの読み書きの両方をサポートしています。ランダムアクセスファイルは、ファイルシステムに格納された大きなバイト配列のように動作します。ファイルポインタと呼ばれる一種のカーソル、つまり暗黙の配列へのインデックスがあります。入力操作はファイルポインタから始まるバイトを読み込み、読み取られたバイトを超えてファイルポインタを進める。ランダムアクセスファイルが読み取り/書き込みモードで作成されている場合、出力操作も利用できます。出力操作は、ファイルポインタから始まるバイトを書き込み、書き込まれたバイトを超えてファイルポインタを進める。暗黙の配列の現在の終わりを超えて出力操作を行うと、配列が拡張されます。ファイルポインタは、getFilePointerメソッドで読み取られ、seekメソッドによって設定されます。

つまり、テキストファイルはシーケンシャルファイル形式なので、次の文字をすべて移動することなく行を異なる長さの行に置き換えることはできません。したがって、行を置き換えるには一般的に読み書きになりますファイル全体これは、別のファイルに書き込む場合や、完了した後に出力ファイルの名前を変更した場合には、達成が容易な場合があります。これは、初期ファイルの内容を単純に再試行できるので、何かがうまくいかない場合に、より堅牢です。 RandomAccessFileの唯一の利点は、一時的な出力ファイル用のディスクスペースが不要で、アクセスのローカリティが向上しているためにディスクからわずかに優れたパフォーマンスが得られることです。

+0

@MelNicholsonお役立ち情報ありがとう。 – iphonedev7

+0

これは受け入れられる回答である必要があります。 – Makaveli84

関連する問題