0

このコードに関して質問を投稿しました。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");
    }
}
4

3 に答える 3

2

ファイル拡張子、さらには実際のファイルコンテンツに基づいてmimeタイプをスニッフィングすることで、ほとんどをカバーできます。とりわけjMimeMagicMavenはここで調整します)の助けを借りてそれを行うことができます。mimeタイプが「text」で始まらない場合、それは確かにテキストファイルではありません。

String mimeType = Magic.getMagicMatch(file, false).getMimeType();
boolean text = mimeType.startsWith("text");
于 2009-12-20T04:59:34.440 に答える
1

MIMEタイプがこれに本当に役立つことがわかりました! JAF

于 2009-12-20T05:26:09.757 に答える
0

これを読んで、ファイル読み取りの問題を修正するために私が何をしたかについて興味がある人のために....代わりにFileReaderを実装し、Windowsで問題は発生していません。しかし、Linuxで、クラッシュにつながる傾向のある問題があることに気づきました。また、NetbeansなどのIDEを実行しているときに、バイナリファイルを読み込もうとするとさまざまなランタイムエラーが発生し、大幅な速度低下が発生することに気付きました。しかし、IDEからではなく実行可能ファイルとして.jarを実行すると、正常に動作します。

これは私が問題を抱えていない関連コードです(.mp3、.exeなどのバイナリファイルタイプをロードする場合でも)

/*...*/
@Override
protected Void doInBackground() throws Exception {
    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;
}
/*...*/
于 2010-03-18T03:23:35.800 に答える