2011-07-15 7 views
1

私は区切られたファイルを何百万ものレコードを含むことができるようになったので、それをさらに処理する前に区切りファイルから最初の行を削除します。区切られたファイルから最初の行を削除する

最初の行の長さは可変ですが、ファイルの種類ごとに異なります。最初の行を削除するには、FileChannelとRandomAccessFileを読んだことがあります。

しかし、最初の行の長さを取得して削除する方法についてはわかりません。

+1

どうやらそれはCSVファイルで非常に基本的なものです。 opencsvのためにGoogleを試してみてください。ファイルを読むと、最初の行は無視されます。 – Shahzeb

+0

... CSVファイルではありません。パイプで区切られたテキストファイルです。私の間違いです...私は同じことを言及しませんでした... – Vivek

答えて

3

処理でちょうどOMMIT最初の行、行ずつ読んで、他人を検討するのに使うreadLine()

+0

しかし、バッファリングされた読者は少し重いです..ファイルには何百万ものレコードがあると考えています...それらを読み、最初の行を省略し、ファイルを書き直してwudを問題にするのですか? – Vivek

+0

いいえ重くはない –

0

あなたはBufferedReaderを使用して処理する前に、最初の行を「削除」するBufferedReader.readLine()を使用することができます。ここから、残りの行を処理したり、ファイルに保存して後で処理することができます。後者のオプションは、利用できる最も効率的なオプションではないかもしれません。

+0

はい...私はあなたに同意します。後者のオプションwudは非常に効率的なオプションではありません。ファイル内の行を考えれば、FileChannel/RandomAccessFileを選択したのはその理由です。 ..しかし、行の終わりを決定する方法として把握することはできません.. Mayb wudはバイトを読み取る必要があります...そして最初の行の終わりの後..ポインタを下に移動します。 ? – Vivek

+0

新しい行はシステムプロパティ "line.separator"によって決定され、オペレーティングシステムの用途に応じて '\ n \ r'、' \ r \ n'、 '\ n'、' \ r'供給されるものが最も一般的です)。 – Jeffrey

4

これを削除しないでください。ちょうど読み取りと無視

の場合は、ファイルを準備してください。ファイル処理単位では最初の行が正しくないファイルを処理できないため、ファイルを読み込んで書き直す必要があります。ファイルシステムのファイルから内容を削除できるI/O操作はありません。

1

入力いただきありがとうございます。同じように、区切られたパイプファイルから最初の行を削除する解決策を見つけました。下記

は、コードスニペット

RandomAccessFile raf = new RandomAccessFile("path to ur delimited file", "rw"); 
FileChannel fileChannel = raf.getChannel(); 
raf.readLine();  
raf.seek(raf.getFilePointer());   
int len = (int) (raf.length() - raf.getFilePointer()); 
byte[] bytearr = new byte[len];   
raf.readFully(bytearr, 0, len);   
fileChannel.truncate(0);    
raf.write(bytearr,0,len); 
関連する問題