Java RandomAccessFile-返回空字符串
我有一个固定格式的文件 我想根据行号访问此文件中的特定行 e、 g.读第100行 每行的长度为200字节 因此,使用RandomAccessFile将光标直接移动到第100行,如下所示:Java RandomAccessFile-返回空字符串,java,file,io,random-access,Java,File,Io,Random Access,我有一个固定格式的文件 我想根据行号访问此文件中的特定行 e、 g.读第100行 每行的长度为200字节 因此,使用RandomAccessFile将光标直接移动到第100行,如下所示: File f = new File(myFile); RandomAccessFile r = new RandomAccessFile(f,"rw"); r.skipBytes(200 * 99); // linesize * (lineNum - 1) System.out.println(r.read
File f = new File(myFile);
RandomAccessFile r = new RandomAccessFile(f,"rw");
r.skipBytes(200 * 99); // linesize * (lineNum - 1)
System.out.println(r.readLine());
但是,我得到的输出为null
我错过了什么
这个问题是对我上一个问题的继续回答
更新:
以下程序完全符合我的预期:
行大小为200个字符
File f = new File(myFile);
RandomAccessFile r = new RandomAccessFile(f,"rw");
r.seek(201 * (lineNumber-1)); // linesize * (lineNum - 1)
System.out.println(r.readLine());
给定行号(整个文件中的任何行号)就是打印该行
@请解释一下
RandomAccessFile.readLine()
在文件末尾返回null。正如Javadoc中所说的
byte[] line = new byte[200];
r.seek(200 * 99);
r.read(line);
String s = new String(line, "UTF-8"); // Or probably "Cp1252"
所以你们在文件的末尾
所以你的计算结果是不正确的。EJP所说的是正确的:
- 确认您必须更正文件。使用不存在的文件创建RandomAccessFile将引发异常。由于没有异常,因此您已经使用一个文件创建了RandomAccessFile。确保它是正确的
- RandomAccessFile使用内部文件位置指针。如果您已经在文件末尾,并且再次跳过了一些字节,那么它将解释您提到的行为。请确保您在文件中的位置正确
因此,如果您要从文件的开头开始工作,seek()提供了更高级别的安全性,无论您对RandomAccessFile做了什么,都可以在文件的正确位置结束。如何知道每行大小为100字节。1个字符表示1个字节。。行长度是200字符意味着200字节…但是假设在单字节中添加多个空间,字节,那么它将为此添加额外的字节,这是糟糕的编程。如果您想阅读100行,请使用readline from Starting阅读此链接或阅读此链接,例如@downvoter:请鼓起勇气解释downvoting!我不明白你想做什么!他试图读取字节数组并将其转换为字符串。@Gjis Overvliet:我在下面的更新部分的问题末尾附加的代码。。对吗?我只是想确认它在不同的操作系统(unix、linux、windows等)上是否会有不同的行为?代码似乎是正确的。不同的操作系统之间不应该有任何区别。