Java InputReader. Определить, является ли читаемый файл двоичным? - PullRequest
0 голосов
/ 20 декабря 2009

Я отправил вопрос относительно этого кода. Я обнаружил, что JTextArea не поддерживает загружаемые данные двоичного типа.

Итак, мой новый вопрос: как я могу обнаружить «плохой» файл и отменить файловый ввод-вывод и сказать пользователю, что ему нужно выбрать новый файл?

class Open extends SwingWorker<Void, String>
{
    File file;
    JTextArea jta;

    Open(File file, JTextArea jta)
    {
        this.file = file;
        this.jta = jta;
    }

    @Override
    protected Void doInBackground() throws Exception
    {
        BufferedReader br = null;

        try
        {
            br = new BufferedReader(new FileReader(file));

            String line = br.readLine();

            while(line != null)
            {
                publish(line);
                line = br.readLine();
            }
        }
        finally
        {
            try
            {
                br.close();
            } catch (IOException e) { }
        }
        return null;
    }

    @Override
    protected void process(List<String> chunks)
    {
        for(String s : chunks)
            jta.append(s + "\n");
    }
}

Ответы [ 3 ]

2 голосов
/ 20 декабря 2009

Вы можете охватить больше всего, нюхая тип MIME на основе расширения файла или, что еще лучше, фактический файл content . Вы можете сделать это с помощью Java Mime Magic Library . Если тип mime не начинается с «text», то это, конечно, не текстовый файл.

String mimeType = Magic.getMagicMatch(file, false).getMimeType();
boolean text = mimeType.startsWith("text");
1 голос
/ 20 декабря 2009

Я обнаружил, что типы MIME действительно могут помочь с этим! JAF

0 голосов
/ 18 марта 2010

Для тех, кто читает это и интересуется тем, что я сделал, чтобы решить проблему с чтением файлов .... Вместо этого я реализовал FileReader и не испытывал проблем в Windows. Однако в Linux я заметил, что есть некоторые проблемы, которые могут привести к сбою. Также я заметил, что при работе через IDE, такую ​​как Netbeans, я получаю различные ошибки времени выполнения при попытке загрузить двоичный файл и значительное замедление; но когда я выполняю .jar как исполняемый файл, а не из IDE, он работает нормально.

Вот соответствующий код, с которым у меня не было проблем (даже при загрузке двоичных типов файлов, таких как .mp3, .exe и т. Д.)

[...] @Override Защищенный Void doInBackground () создает исключение { BufferedReader br = null;

try
{

    br = new BufferedReader(new FileReader(file));
    int ch = br.read();

    while(ch != -1)
    {
        publish(ch);
        ch = br.read();
    }
}
finally
{
    try
    {
        br.close();
    } catch (IOException e) { }
}
System.gc();
return null;

} [...]

...