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

如何仅使用开始和结束位置从java文件中获取字符串?,java,file,file-access,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文件中的

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文件中使用字符串的位置(开始和结束)来获取字符串?

最简单的方法是使用

它有一个名为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


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

我已经运行了此代码,但没有得到预期的数据。这就是我所做的:我使用了此方法,得到了[B@5b5fdf31而不是int x=0;然后直接输出缓冲区:
System.out.println(缓冲区);
因为输出的值是字节数组。转换为字符串很重要。另外,您可能想看看,我在哪里回答了如何使用循环进行搜索(适用于Unicode)。另请参阅