-1

我的 .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 文件的。因此,使用行号将毫无意义,因为每一行的长度都是可变的,并且位置是相对于整个文件的。很难计算出一条线上误差的实际位置。

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

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

4

1 回答 1

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
}

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

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

于 2013-01-04T11:38:24.923 回答