如何在Java中的Random Access文件中返回行的位置?

时间:2011-12-23 22:00:14

标签: java position random-access

我创建了一个随机访问文件,我在其中写了一些信息。 我想在一个数组中存储随机访问文件中每一行的位置。 我将有一个指向随机访问文件的每一行的索引。 所以我需要在我的索引中存储随机访问文件行的位置。

我的程序如下

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();
   }
}

对于随机访问文件中创建的每一行, 我想在阵列中存储他们的位置。

然后这些头寸将存储在指数中。

有什么方法可以用来返回一行的位置 在随机访问文件中?

2 个答案:

答案 0 :(得分:4)

RandomAccessFile已经提供了您想要的一切。

首先,这里不需要seek():文件指针在每次写操作时都会超过写入文件的字节。

这意味着,在您编写了行n之后,对于n的任何值,从.getFilePointer()对象中获取RandomAccessFile的结果将为您提供启动第n+1行的偏移量。第1行从偏移0开始,这几乎是你必须真正考虑的唯一因素。

答案 1 :(得分: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无关,但它可能是一种替代方案,取决于你正在做什么。