0

以下の例に従おうとしていますが、Java: ファイルの最後の行が空 であるかどうかを確認して、ファイルが CRLF(空の行) で終了するかどうかを判断しますが、メソッド RandomAccessFile に文字列を渡すと、ファイルが見つかりません. 問題は、ファイルパスを入力できないことですが、ファイルの内容を文字列として持っているため、 File f = new File(myString); を使用してファイルを作成しようとしました。次に、作成されたファイルをメソッドに渡しますが、機能せず、同じエラー(ファイルが見つかりません)が発生しました(ファイルの最初の行をパスと見なします)!

CRLFで終了するかどうかを確認したいファイルの内容を含む文字列から、RandomAccessFileで受け入れられるファイルを作成するにはどうすればよいですか。

私が明確だったことを願っています。

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) {
        }
    }
}
4

1 に答える 1

0

ファイルの内容が文字列として既にメモリにある場合は、最後の行が空かどうかを判断するために再度ファイルに書き込む必要はありません。コンテンツを行末文字で分割し、最後の行から空白を削除して、何か残っているかどうかを確認します。

  String fileContent = "line1\nline2\nline3\nline4\n";
  // -1 limit tells split to keep empty fields
  String[] fileLines = fileContent.split("\n", -1);
  String lastLine = fileLines[fileLines.length - 1];
  boolean lastLineIsEmpty = false;
  if(lastLine.trim().isEmpty())
  {
     lastLineIsEmpty = true;
  }

  //prints true, line4 followed by carriage return but 
  //no line 5
  System.out.println("lastLineEmpty: " + lastLineIsEmpty);
于 2013-07-09T16:58:52.853 に答える