Параметр 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);