使用随机文件访问,读取每个记录的姓氏和主要内容,并将其写入顺序文件。在屏幕上显示这些记录。我被困的地方是试图让raf.seek只对某些字符停止,所以我知道要显示数据,我必须找到字符7-18和字符34-50。我也在想,如果我将该文件转换为字符串,是否会更容易呢?
示例数据文件
nnnnnnaaaaaaaaaaabbbbbbbbbbbb939ccccccccccccccccc
125546琼斯鲍勃045计算机科学
334535布朗史蒂夫023化学
227863 227863Finklestein 056历史
443456Howler Iain 038计算机科学
883643莫里森托尼045物理学
输出文件
琼斯计算机科学
棕色化学
芬克尔斯坦历史
咆哮者计算机科学
莫里森物理
屏幕还将显示:
琼斯计算机科学
棕色化学
芬克尔斯坦历史
咆哮者计算机科学
莫里森物理
以下是我到目前为止所拥有的:
import java.io.File;
import java.io.RandomAccessFile;
import java.io.IOException;
public class RandomAccessFileDemo {
private static void doAccess() {
try {
File file = new File("myfile.txt");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
// Read a character
byte ch = raf.readByte();
System.out.println("Read first character of file: " + (char)ch);
System.out.println("Read full line: " + raf.readLine());
raf.seek(4);
System.out.println("Read line 4: " + raf.readLine());
// Seek to the end of file
raf.seek(file.length());
// Append to the end of the file
raf.write(0x0A);
raf.writeBytes("This will complete the Demo");
raf.close();
} catch (IOException e) {
System.out.println("IOException:");
e.printStackTrace();
}
}
public static void main(String[] args) {
doAccess();
}
}发布于 2017-02-16 01:54:09
System.out.println("Read full line: " + raf.readLine()); raf.seek(4); System.out.println("Read line 4: " + raf.readLine());
RandomAccessFile的搜索方法不按行数移动偏移量,而是以字节为单位移动偏移量。
以下是一份摘录:
seek.htm
pos --从文件开头开始测量的偏移位置(以字节为单位),用来设置文件指针的位置。
因此,您需要计算移动文件指针并读取记录的字节数。
我建议您在循环中使用readLine,并解析每一行以提取所需的数据。
希望这能有所帮助!
发布于 2017-02-16 01:56:07
我认为您应该用while循环逐行读取文件(虽然文件没有结束,但请读下一行)。在每次迭代中,您可以将该行转换为string,然后对该行进行分析,并打印您感兴趣的内容。
这是一个典型的文件分析器。
https://stackoverflow.com/questions/42263287
复制相似问题