Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Отличить тип файла (банрный или текстовый)


Автор: 0x00 29.7.2011, 08:19
Добрый день!

Возникла задача - отличить бинарный файл от текстового.
гугл читал, внятных ответов не нашел.

Если ктонибудь сталкивался с подобной проблемой, прошу совета..

Заранее благодарен!

Автор: jk1 29.7.2011, 11:08
Кодировка текста или формат бинарного файла известны?

Автор: 0x00 29.7.2011, 11:41
Цитата(jk1 @ 29.7.2011,  11:08)
Кодировка текста или формат бинарного файла известны?

необходимо отлечить обычный *.txt файл (ANSI) от любого другого файла (архив, исполняемый файл, картинка)..
расширение файла в расчет не брать.., т.к. у некоторых текстовых файлов вообще нету расширения

Автор: jk1 29.7.2011, 13:45
Без дополнительных предположений ничего у Вас не выйдет. Это для Вас файлы делятся на бинарные и текстовые, а в памяти все это последовательности байтов, не более того.
Существует немало способов отличить одно от другого, но все они работают в определенных предположениях:

1. Поиск 0x00 или других управляющих символов. Работает в большинстве случаев, если текст предполагается в ASCII. Если текст в юникоде, этот способ практически бесполезен.
2. Попытка опознать популярные бинарные форматы в файле. Неплохо справляется, если есть ограниченный перечень бинарных форматов, которые будут приходить на вход.
3. Можно полагаться на то, что только текстовые файлы обычно содержат побелы в значительных количествах. Способ не идеален, да и текст можно без пробелов написать.

Можно также почерпать вдохновения в механизмах работы утилиты file: http://linux.about.com/library/cmd/blcmdl1_file.htm или посмотреть, как справляется с проблемой http://blogs.msdn.com/b/oldnewthing/archive/2007/04/17/2158334.aspx

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

Автор: MaxPayneC 29.7.2011, 20:09
Для того чтобы отличить текстовый файл от бинарного, необходимо дать определение понятию "текстовый файл", без использования интуитивно-понятных терминов. Т.е. "текстовый файл это файл, содержащий текст" не подойдет.

Возможно подойдет что-то типа "текстовый файл это файл, содержащий символы с ASCII-кодами из заданного множества", но это предположение, о котором писал jk1.

Автор: COVD 30.7.2011, 05:16
Вопрос филосоВский, не Java и тем более не J2EE.

Автор: 0x00 1.8.2011, 13:50
подошло решение с поиском null'ов (0x00) в теле файла.
результат устроил.. изображения, архивы и иполныемые файлы отсеиваются на ура...

Код

            while(((strLine = br.readLine()) != null) && (cnt != 13)){ // 13 строк
                byte[] line = strLine.getBytes();
                for(byte b : line){
                    if(b == 0x00){
                        isError = true;
                        in.close();
                        break;
                    }
                }
                cnt++;
            }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)