我的.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文件中的位置(开始和结束)来获取字符串?
答案 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以保证读取所有字节。