Параметр java RandomAccessFile

Я пытаюсь следовать приведенному ниже примеру, нашел его здесь Java: Найти, если последняя строка файла пуста, чтобы определить, завершается ли файл с помощью CRLF(пустая строка), однако, когда я передаю String методу, RandomAccessFile говорит, что файл Not Found. проблема в том, что я не могу указать ему путь к файлу, но у меня есть содержимое файла в виде строки, поэтому я попытался создать файл, используя File f = new File(myString); и затем передайте метод созданному файлу, но он не работал, и он выдал мне ту же ошибку (Файл не найден) (он рассматривает первую строку файла как путь)!

Как я могу создать файл, принятый RandomAccessFile, из моей строки, которая содержит содержимое файла, который я хочу проверить, заканчивается ли он 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) {
        }
    }
}

1 ответ

Решение

Если у вас уже есть содержимое файла в памяти в виде строки, вам не нужно снова записывать его в файл, чтобы определить, является ли последняя строка пустой. Просто разделите содержимое символом конца строки, а затем удалите пробелы из последней строки и посмотрите, осталось ли что-нибудь:

  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);
Другие вопросы по тегам