Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java使用Rand Access文件从文件中获取特定字符_Java - Fatal编程技术网

Java使用Rand Access文件从文件中获取特定字符

Java使用Rand Access文件从文件中获取特定字符,java,Java,使用随机文件访问,读取每条记录的姓氏和主修科目,然后写入顺序文件。在屏幕上显示这些记录。我陷入困境的地方是试图获得英国皇家空军。寻求只在某些字符上停止,以便我知道要显示数据,我必须找到字符7-18和字符34-50。我还想知道如果我把那个文件转换成一个字符串是否会更容易 示例数据文件 nnnnnnaaaaaaaaaaaabbbbbbbb939ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

使用随机文件访问,读取每条记录的姓氏和主修科目,然后写入顺序文件。在屏幕上显示这些记录。我陷入困境的地方是试图获得英国皇家空军。寻求只在某些字符上停止,以便我知道要显示数据,我必须找到字符7-18和字符34-50。我还想知道如果我把那个文件转换成一个字符串是否会更容易

示例数据文件

nnnnnnaaaaaaaaaaaabbbbbbbb939cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

125546Jones Bob 045计算机科学
334535布朗-史蒂夫023化学
227863芬克尔斯坦红056历史
443456 Howler 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();
    }

}
RandomAccessFile
的seek方法不会按移动的行数移动偏移量(以字节为单位)

以下是摘录自:

pos——从文件开头开始以字节为单位的偏移位置,用于设置文件指针

因此,您需要计算移动文件指针的字节数,然后读取记录

我建议您在循环中使用
readLine
,并解析每一行以提取所需的数据



希望这有帮助

我认为您应该使用while循环逐行读取文件(当您无法获得文件结尾时,请阅读下一行)。在每次迭代中,您可以将该行转换为字符串,然后分析该行并打印您感兴趣的内容

这是一个典型的文件分析器。

raf.seek(4);System.out.println(“读取第4行:+raf.readLine())失败
        System.out.println("Read full line: " + raf.readLine());
        raf.seek(4);
        System.out.println("Read line 4: " + raf.readLine());