2011-08-17 18 views
4

私は自分のアプリケーションにファイルを作成していますが、このファイルには何らかの内容を書いています。Javaのファイルサイズを制限する方法

私のファイルがあるサイズに達した後、100行としましょう。最初の行を消去し、新しい行を下に書きたいと思います。

私のファイルは制限する必要がありますが、ファイルに書き込んだ最新のコンテンツを維持する必要があります。

Javaで可能かどうか教えてください。これを行うための選択肢がある場合は、教えてください。

+0

行数が100行を超えて古い行を削除すると、ファイルを別のファイルに分割するコードがある可能性がありますか?もちろん、これはあなたが探していたものよりもCPUの方が高価ですが、あなたの問題を解決することができます。 – newbie

答えて

7

Javaで可能かどうか教えてください。

これは簡単な方法で行うことはできません。ファイルの最後の部分だけを切り捨てることができます。

(これは基本的なファイルシステムから、そして原因なぜあなたはできないファイルの途中でバイトを挿入すると同じ理由に継承限度である)あなたによって手動で行うことができます。

  1. 最初の行のバイト長を調べると、nです。長さlength of file - nにファイルを切り捨てi - n
  • をposにするために、POS ii = n ... length of file
    1. 書き込み・バイトについて

    これを行うための任意の代替があります場合は私に知らせてください。

    私は、サイクリックバッファーなどを使用して解決することをお勧めします。それでも、メモリ内にバッファを保持し、それをクリアされたファイルにダンプしない限り、すべての行が等しく長いとは限りません。

  • +0

    循環バッファを使用する場合+1。 – Rudy

    4

    これは可能ですが、実装方法によっては処理が非常に遅くなる可能性があります。少なくとも100行をVectorのようなデータ構造体に保存しておけば、毎回ファイルを読み込む必要はなく、最初の要素を削除して新しい最終要素を追加するたびに書き込むだけです。

    別の方法として、各行をそれぞれのファイルに保存する方法があります。その後、ファイルを削除し、100行目以降の改行ごとに新しいファイルを作成するだけです。

    [後で] あなたのラインが予測可能なサイズである場合、別の方法、固定長レコードの考え。各行は空白文字の後に続けて空白を置き、必要に応じて末尾に行末文字を置きます。レコードを書くたびに、アスタリスクをつけて現在の行にし、前の行にインデックスを付ける(モジュロ演算子で自動的に折り返すように)、そのアスタリスクをスペースで置き換えます。あなたがあなたのプログラムで追跡しているので知っている現在の行(に

    this happened at that time       
    blah blah happened        
    *this is the current record 
    this was the fourth event to occur after startup 
    this was the fifth event to occur after startup 
    this was the sixth event to occur after startup 
    this was the seventh event to occur after startup 
    this was the eighth event to occur after startup 
    this was the ninth event to occur after startup 
    this was the tenth event to occur after startup 
    

    あなただけのファイルを開く必要があります。この方法で、インデックス、そうでない場合、例:10行のログファイルは、次のようになります再起動時にループしてアスタリスクを見つけてください)、上書きして、選択した長さのスペースで埋めます。 1つのレコードをインデックスに戻し、アスタリスクをスペースで置き換えます。

    0

    私は循環バッファを使用します。私はそれを2つのファイルで実装し、最初のファイルに100行が含まれていれば2番目のファイルを使い始める方法です。そのファイルが100行になると、最初のファイルに書き戻します。そうすれば、100〜200行の合計が得られます(初めて100行以上になると)。