2011-01-12 8 views
1

テキストファイルにペンをつけたり、数行を読み込んだり閉じたりして、再度開いて前の行から読み始めますか?それとも、いつもトップから始める必要がありますか?特定の行からテキストファイルを読み始める

+2

ファイルを閉じてからもう一度開くと、ファイルの内容が変わるとどうなりますか?同じ行が、もう一度読み直すことに関係するでしょうか? –

+0

私はあなたがファイルにしか追加できないと仮定しています。 –

+0

あなたはあなたのコードがファイルへの読み書きが可能な唯一のコードであると仮定していて、追加するだけです。その場合は、ファイルを開いたままにしないでください。 –

答えて

0

私はあなたがファイルを開くたびに、最初からあなたを始めます。

1

私は毎回先頭から始めます。これは最も簡単で、おそらくそれほど遅くはありません。あなたはRandomAccessFileを使うことができますが、あなた自身のラインリーダーでそれをラップする必要があります(また、ファイルが互換性のない方法で変更されていないことを確認してください)

+1

実際には、ファイル全体を目的の場所に読み取るよりも高速に検索することができます。だからRandomAccessFileは行く方法です。また、そのラッパーはインターネットで書いたり、見つけたりするのが難しくありません。 – bezmax

+0

私はAPIをチェックして、RandomAccessFileに既に 'String readLine()'が実装されていることに気付きました。 – bezmax

+0

読み込んだファイルを100 MB /秒の速度で読み取ることができます。したがって、10 MBのファイルを再読み込みするには約100 msかかります。 10 GBのテキストファイルをお持ちの場合、それは本当の違いになります。 –

0

行番号を外部に保存できません希望の位置にジャンプ/シークしますか?

1

することができます。これは最速の方法ではありませんが、うまくいくでしょう。ちなみに、あなたの質問に答えた人は、ファイルの最初から再処理を始めるべきであるということは、あなたの質問のポイントを完全に失いました。あなたが中断したところに戻って欲しい理由は十分です。

ここでは、カウンタ値を保存し、カウンタ値に到達するまでファイルを繰り返し処理できるコードをいくつか示します...どの時点でループが影響を受けて処理されているかをループ内に処理します残りの行については、

乾杯!

//define input text file 
def file = new File('C:\\inputtextfile.txt') 
//define file for the last referenced counter 
def CountFile = new File ('C:\\prime\\lastcount.txt') 

//if the counter was null set it to zero 
if (CountFile.eachLine({it}) == null){ 
CountFile.write('0') 
} 

//read the counter into a value 
StartLine = CountFile.eachLine({it}) as long 
//set the first line of the file 
lineCount=0 

file.eachLine { line -> 
if (lineCount >= StartLine){ 


//write the counter to a text file 
//////////////////////////////////////////////////////////////// 
CountFile.write(lineCount.toString()) 
    lineCount++ 
/////////////////////////////////////////////////////////////// 
} 
関連する問題