我创建了一个随机访问文件,我在其中写了一些信息。 我想在一个数组中存储随机访问文件中每一行的位置。 我将有一个指向随机访问文件的每一行的索引。 所以我需要在我的索引中存储随机访问文件行的位置。
我的程序如下
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();
}
}
对于随机访问文件中创建的每一行, 我想在阵列中存储他们的位置。
然后这些头寸将存储在指数中。
有什么方法可以用来返回一行的位置 在随机访问文件中?
答案 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无关,但它可能是一种替代方案,取决于你正在做什么。