Получение формата файла в Java / DOS-UNIX - PullRequest
1 голос
/ 16 июня 2010

Есть ли простой способ узнать, имеет ли конкретный файл конец строки в DOS / MAC / UNIX?

В настоящее время я читаю файл побайтно и останавливаюсь, если вижу возврат каретки Windows

for (byte thisByte : bytes) {

  if ((!isDos) && (thisByte == 13)) {
      isDos = true;
  }
...

Есть ли способ получить ту же информацию без чтения файла побайтно?

Ответы [ 3 ]

3 голосов
/ 16 июня 2010

Возможной оптимизацией может быть просмотр только одного или двух последних байтов файла. Поскольку многие текстовые файлы заканчиваются строкой, это должно работать большую часть времени. Если вы не заметите строку, заканчивающуюся там, вам придется отступить к побайтовому.

Кстати, ваш пример кода устанавливает для isDos значение true, не проверяя, является ли следующий следующий символ десятичным 10. Если это не 10, то, вероятно, это формат файла MAC.

1 голос
/ 16 июня 2010

Предполагая, что это текстовый файл и строки имеют «разумную» длину, вы можете прочитать большой блок файла (скажем, 4096 байт) и отсканировать только этот блок на наличие символа CR.

Нов противном случае, нет, единственный способ найти символ в файле - это фактически прочитать весь файл и найти его.

Предполагается, что вы задаете этот вопрос из-за проблем с производительностью.чтение файла по байтам за раз: убедитесь, что вы обернули FileInputStream BufferedInputStream.

0 голосов
/ 16 июня 2010

Если вы знаете, что файл использует только один вид конца строки, то вы можете просто найти первую новую строку и посмотреть, DOS / UNIX / Mac.

...