2011-12-23 3 views
0

私はランダムアクセスファイルを作成し、そこにいくつかの情報を書きます。 ランダムアクセスファイルの各行の位置を配列に格納したいと思います。 ランダムアクセスファイルのすべての行を指すインデックスを作成します。 私は索引にランダムアクセスファイルの行の位置を格納する必要があります。Javaのランダムアクセスファイルで行の位置を返すにはどうすればよいですか?

私のプログラムは、ランダムアクセスファイルで作成されたラインのそれぞれについて

package randomaccessfile; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.RandomAccessFile; 

public class raf { 

    public static void main(String[] args) throws FileNotFoundException, IOException { 
     File file = new File("DocumentsFile.txt"); 
     RandomAccessFile raf = new RandomAccessFile(file, "rw"); 
     for (int i = 0; i <= 10 ; i++) { 
     String sentence = "1 Info Name Surname"; //i create sentences in the random access file 
     raf.seek(file.length()); 
     raf.writeBytes(sentence); 
     raf.writeBytes("\r\n"); 
     } 
     raf.close(); 
    } 
} 

、 を次のように私は、配列の位置に格納したいです。

この位置はインデックスに格納されます。

ランダムアクセスファイルに行の位置を返すために使用できる方法はありますか?

答えて

3

RandomAccessFileは、既に必要なものすべてを提供しています。

ここでは、seek()は必要ありません。ファイルポインタは、各書き込み操作でファイルに書き込まれたバイト数を超えて進みます。

これは、あなたがnのどのような値のため、ラインnを書いた後、RandomAccessFileオブジェクトから.getFilePointer()の結果をつかむことは、あなたに行n+1の開始オフセットを与える、ということを意味します。 1行目はオフセット0から始まり、それはあなたが実際にここで説明しなければならない唯一のものです。

0

一方、本当に気になるのが行番号である場合、LineNumberReaderを使用して、書かれたファイルのすべての行を特定の行番号にマップできます。

File file = new File("jedi.txt"); 

try(LineNumberReader lnr = new LineNumberReader(new FileReader(file))){ 
    String line = null; 

    while ((line = lnr.readLine()) != null){ 
     System.out.println(lnr.getLineNumber() + " " + line); 
    } 
}catch(IOException e){ 
    e.printStackTrace(); 
} 

もちろん、これはRandomAccessFilesとは関係ありませんが、あなたがやっていることに応じて代替することもできます。

+0

問題は、彼がファイルに書き込むことです... – fge

+0

あなたはLineNumberReaderを使って配列を初期化し、次にRandomAccessFileを使ってファイルに新しい行を書き込むことができます。これを行うと、単に対応するアレイ。ですから、LineNumberReaderは配列の初期化メカニズムとしてのみ使用できます。 –

+0

まだ、私はあなたがそれを達成したいと思っていませんか? – fge

関連する問題