-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; Diagnostic Collector は、たとえば 143-145 エラーが発生したなどの位置を返します。

行番号も取得しますが、返される位置は .java ファイル全体に対して相対的です。したがって、各行は可変長であり、位置はファイル全体に対して相対的であるため、行番号を使用しても意味がありません。ラインでのエラーの実際の位置を計算することは困難です。

また、前の行の最後の文字にエラーがない場合、前の行の最後の文字の終了位置を取得する方法はありません (例: 7 行目のエラー: 前の行 = 6 行目)。

javaファイルからその位置(開始と終了)を使用して文字列を取得する方法はありますか?

4

1 に答える 1

0

最も簡単な方法は、RandomAccessFileを使用することです。

これには、シークと呼ばれるメソッドがあり、シークする必要のある位置を取ります。

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
}

編集:ループを使用して一度に1つの文字を読み取り、バイト配列の代わりに文字配列を使用することもできます。おそらくあなたにとってはもっと簡単でしょう。readの代わりにreadCharメソッドを使用してください。

すべてのバイトが読み取られることを保証するために、読み取りをreadFullyに切り替えました。

于 2013-01-04T11:38:24.923 に答える