- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个固定格式的文件。
我想根据行号访问该文件中的特定行。
例如读取第 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.readLine());
但是,我得到的输出为空。
我在这里缺少什么?
这个问题是继续回答我之前的问题Reaching a specific line in a file using RandomAccessFile
更新:
下面的程序完全按照我的预期工作:
行大小为 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());
给出行号(整个文件中的任何行号)正在打印该行。
@EJP:请解释一下!
最佳答案
首先,如果您只想从文件中读取而不是写入文件,那么我建议您将 RandomAccessFile 打开为“r”而不是“rw”。原因是,如果文件打开以允许写入访问,您实际上可以将文件中的指针移动到大于文件长度的位置,因为您可以将文件写入到您想要的大小。
例如,如果您有一个长度为 100 字节的文件,以只读模式打开它会强制您将指针保留在这 100 字节中的某个位置。但是,如果您以读写模式打开同一个文件,您可以告诉 RandomAccessFile 去查找(250),它会服从而不会出现任何问题,因为它认为您可能想要在文件中的此时写出数据。
因此,正如其他一些人所说,您可能已经移到了文件末尾,这在“rw”模式下非常有效。
其次,如果您要从文件的开头读取,我建议您使用seek() 而不是skipBytes()。通过使用seek(),您可以保证移动到您想要的确切位置,因为它始终相对于文件的开头。但是,skipBytes() 是相对于文件中当前指针位置的,因此,如果您不小心将指针移动到了 RandomAccessFile 构造函数和skipBytes() 方法调用之间的代码中的某个位置,您将无法到达正确的位置.
因此,如果您要从文件的开头开始工作,seek() 提供了更高级别的安全性,无论您执行其他什么操作,您都将到达文件中的正确位置。随机访问文件。
关于java - RandomAccessFile - 返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9783880/
我正在尝试创建一个程序,其中字符串的前三个字符重复给定次数,如下所示: foo('Chocolate', 3) # => 'ChoChoCho' foo('Abc', 3) # => 'AbcAbcA
我有以下字符串: std::string str = "Mode:AAA:val:101:id:A1"; 我想分离一个位于 "val:" 和 ":id" 之间的子字符串,这是我的方法: std::st
DNA 字符串可以是任意长度,包含 5 个字母(A、T、G、C、N)的任意组合。 压缩包含 5 个字母(A、T、G、C、N)的 DNA 字母串的有效方法是什么?不是考虑每个字母表 3 位,我们可以使用
是否有一种使用 levenstein 距离将一个特定字符串与第二个较长字符串中的任何区域进行匹配的好方法? 例子: str1='aaaaa' str2='bbbbbbaabaabbbb' if str
使用 OAuth 并使用以下函数使用我们称为“foo”(实际上是 OAuth token )的字符串加密 key public function encrypt( $text ) { // a
我是一名优秀的程序员,十分优秀!