Как надежно определять типы файлов?

Цель: по файлу определить, относится ли он к заданному типу (XML, JSON, свойства и т. д.)

Рассмотрим случай с XML. До тех пор, пока мы не столкнулись с этой проблемой, следующий примерный подход работал нормально:

    try {
        saxReader.read(f);
    } catch (DocumentException e) {
        logger.warn("  - File is not XML: " + e.getMessage());
        return false;
    }
    return true;

Как и ожидалось, если XML правильно сформирован, тест будет пройден, и метод вернет значение true. Если произойдет что-то плохое и файл не может быть проанализирован, будет возвращено значение false.

Однако это не работает, когда мы имеем дело с искаженным файлом XML (хотя все еще XML).

Я бы не стал полагаться на расширение .xml(постоянно терпит неудачу), ища строка внутри файла и т. д.

Есть ли другой способ справиться с этим?

Что вы должны увидеть внутри файла, чтобы «заподозрить, что это может быть XML, хотя DocumentExceptionбыло перехвачено». Это нужно для разбора.

8
задан James Raitsev 16 March 2012 в 16:02
поделиться