2

Javaでやらなければならない学校の課題について質問があります。ファイルからデータをロードし、これらのファイルのエラーをチェックする必要があります。

bufferedReaderファイルの最後まで完全に機能する a を使用してファイルを読み取ります。その行が空の場合、最後の行は無視されます。

readLine()空行をチェックする方法は知っていますが、最後の行では の関数を使用しても結果が得られませんbufferedReader

最後の行が空である必要があるため、空であるかどうかを知ることが重要です。空行が存在しない場合は、エラーが発生するはずです。

簡単に言えば、次の状況の違いを見分ける方法が必要です (CRLF行の終わりはどこですか)。

状況 1 (正しい):

line x CRLF
line y CRLF

状況 2 (誤り):

line x CRLF
line y

これらの状況は両方とも、readline()行 y の後に null を返します。

途中でファイルの行を数えているので、行カウンターがある場合 (注: そのカウンターは空の行も数えなければなりません。見つかったものはすべて数えませんでした)

ファイルには、必要なコードに違いがある場合は、全体に空の行も含まれています(これらの行は、これらの行にないため、本来あるべき姿で適切に検出されますEOF

プログラムは最後の行があってもなくても機能することに注意してください。それがなければ、割り当てがエラーを与えるように指示しているだけです。

4

3 に答える 3

6

最後の行に CRLF があるかどうかを判断したい場合は、最後から読み取ることができます。

public static boolean lastLineisCRLF(String filename) {
    RandomAccessFile raf = null;
    try {
        raf = new RandomAccessFile(filename, "r");
        long pos = raf.length() - 2;
        if (pos < 0) return false; // too short
        raf.seek(pos);
        return raf.read() == '\r' && raf.read() == '\n';
    } catch (IOException e) {
        return false;
    } finally {
        if (raf != null) try {
            raf.close();
        } catch (IOException ignored) {
        }
    }
}
于 2013-01-10T13:17:00.653 に答える
1
while ((tmp = br.readLine()) != null) {
    strLine = tmp;
}

String lastLine = strLine;

これにより、ファイルの最後の行が得られます。最後の行が空かどうかを確認してみませんか?

于 2013-01-10T13:18:19.767 に答える
1

あなたの「状況1」に空行はありません。は行 yにCRLF属し、その後は何もありません (これもreadline()わかります)。エディターでは、これによりカーソルが 1 行下に移動するように指示されるため、新しい空の行のように見えますが、実際には、エディターが文字を表示するヒントとしてCRLF解釈することによって引き起こされる「目の錯覚」です。CR/LFカーソルを新しい行に移動します。

于 2013-01-10T13:17:04.010 に答える