我的.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,以保证所有字节都被读取。