如何仅使用开始和结束位置从java文件中获取字符串?

时间:2013-01-04 11:30:57

标签: java file file-access

我的.java文件由一系列代码组成,每行代码可变。 .java文件如下所示:

public class MyC{
    public void MyMethod()
    {
        System.out.println("My method has been accessed");
        System.out.println("hi");
        String l;
        int x=0;
    }
}

简单地说,我想要做的是扫描.java文件中的错误并捕获字符串中的错误。 我使用了诊断收集器来捕获错误的开始和结束位置。

假设我在第7行犯了错误:x = 0; 诊断收集器将返回位置,例如143-145错误已发生。

我也得到了行号,但返回的位置是相对于整个.java文件的。因此,使用行号将是毫无意义的,因为每行具有可变长度并且位置相对于整个文件。在一条线上计算误差的实际位置是很困难的。

如果前一行的最后一个字符没有错误(例如:第7行的错误:上一行=第6行),我无法获取前一行中最后一个字符的结束位置

有没有办法让我通过使用java文件中的位置(开始和结束)来获取字符串?

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用RandomAccessFile

它有一个名为seek的方法,它采取它应该寻求的位置:

String getStringFromFile(String fileName, long position, int length) throws IOException {
    byte[] buffer = new byte[length]; // You may want to take care of multi-byte encodings here
    RandomAccessFile file = new RandomAccessFile(fileName, "r");
    file.seek(position);
    file.readFully(buffer);
    return new String(buffer); // You may want to add encoding handling here
}

编辑:您也可以使用循环并一次读取一个char并使用char数组而不是字节数组。对你来说可能更简单。使用readChar方法而不是read。

将readFully切换为readFully以保证读取所有字节。