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



我的.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行出错:in x=0;诊断收集器将返回位置,例如143-145错误发生。

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

如果在前一行的最后一个字符没有错误,我就没有办法得到前一行最后一个字符的结束位置(e。G:第7行错误:前一行=第6行)。

是否有一种方法让我得到一个字符串使用它的位置(开始和结束)从java文件?

最简单的方法是使用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
}

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

将read切换为readFully,以保证所有字节都被读取。

相关内容

  • 没有找到相关文章