Java InputReader。检测正在读取的文件是否为二进制文件?

时间:2009-12-20 04:49:55

标签: java validation nullpointerexception swingworker jtextarea

我发布了有关此代码的问题。我发现JTextArea不支持加载的二进制类型数据。

所以我的新问题是如何检测“坏”文件并取消文件I / O并告诉用户他们需要选择新文件?

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 个答案:

答案 0 :(得分:2)

您可以根据文件扩展名嗅探mime类型,或者更好的是,实际文件内容。你可以在Java Mime Magic Library的帮助下做到这一点。如果mime类型不以“text”开头,那么它肯定不是文本文件。

String mimeType = Magic.getMagicMatch(file, false).getMimeType();
boolean text = mimeType.startsWith("text");

答案 1 :(得分:1)

我发现MIME类型确实对此有所帮助! JAF

答案 2 :(得分:0)

对于那些阅读此内容并且对我为修复文件读取问题所做的工作感到好奇的人....我已经实现了FileReader并且在Windows上没有遇到任何问题。但是我注意到Linux上有一些问题会导致崩溃。另外我注意到在运行像Netbeans这样的IDE时,我在尝试加载二进制文件和大量减速时收到各种运行时错误;但是当我将.jar作为可执行文件执行而不是从IDE执行时它可以正常工作。

以下是我没有遇到任何问题的相关代码(即使加载.mp3,.exe等二进制文件类型)

[...] @覆盖 protected 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;

} [...]