Como abrir um arquivo com o programa padrão associado

86

Como abro um arquivo com o programa associado padrão em Java? (por exemplo, um arquivo de filme)

Frederic Morin
fonte
Se você estiver usando JavaFXaqui ou aqui .
Sedrick

Respostas:

136

Você pode usar Desktop.getDesktop().open(File file). Consulte a seguinte pergunta para outras opções: " [Java] Como abrir o editor preferido do sistema do usuário para determinado arquivo? "

Zach Scrivena
fonte
1
Continuo recebendo essa exceção ao tentar com um arquivo de filme, mas funciona com um arquivo de imagem (bmp): java.io.IOException: Falha ao abrir o arquivo: / D: /vidz/2006-04-02.wmv. Mensagem de erro: O parâmetro está incorreto.
Frederic Morin de
Você pode fornecer seu código na pergunta? Além disso, qual versão do sistema operacional e do Java você está usando?
Zach Scrivena
o que não entendo é que funciona com imagens ... de qualquer forma, estou usando Java 1.6.0.06 e aqui está o código: File file = new File (MoviePlay.getInstance (). getBasePath (), movieFile.getPath () ); tente {Desktop.getDesktop (). open (arquivo); } catch (ex) {...}
Frederic Morin
5
Eu sei que já faz muito tempo, mas ... o problema era minha máquina. O assiciation do programa padrão no meu Windows XP não está ok e estou tendo problemas em outros programas. Tentei com outras máquinas desde então e este método funciona muito bem! Aceitaram !
Frederic Morin,
7
Adicionando a esta velha resposta; .edit()também pode ser usado se o propósito da abertura for para edição. Alguns sistemas possuem diferentes aplicativos padrão para visualização e edição; .open()irá abrir o visualizador.
Jason C
0

SwingHacks tem uma solução para versões anteriores do Java.

Acho que eles usaram o objeto Runtime para executar o comando 'start' no windows e há um comando semelhante no mac.

l_39217_l
fonte
-8

Aqui está:

File myFile = new File("your any type of file url");
FileOpen.openFile(mContext, myFile);

Crie uma classe diferente dentro do pacote:

// code to open default application present in the handset


public class FileOpen {

    public static void openFile(Context context, File url) throws IOException {
        // Create URI
        File file=url;
        Uri uri = Uri.fromFile(file);

        Intent intent = new Intent(Intent.ACTION_VIEW);
        // Check what kind of file you are trying to open, by comparing the url with extensions.
        // When the if condition is matched, plugin sets the correct intent (mime) type, 
        // so Android knew what application to use to open the file
        if (url.toString().contains(".doc") || url.toString().contains(".docx")) {
            // Word document
            intent.setDataAndType(uri, "application/msword");
        } else if(url.toString().contains(".pdf")) {
            // PDF file
            intent.setDataAndType(uri, "application/pdf");
        } else if(url.toString().contains(".ppt") || url.toString().contains(".pptx")) {
            // Powerpoint file
            intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
        } else if(url.toString().contains(".xls") || url.toString().contains(".xlsx")) {
            // Excel file
            intent.setDataAndType(uri, "application/vnd.ms-excel");
        } else if(url.toString().contains(".zip") || url.toString().contains(".rar")) {
            // WAV audio file
            intent.setDataAndType(uri, "application/x-wav");
        } else if(url.toString().contains(".rtf")) {
            // RTF file
            intent.setDataAndType(uri, "application/rtf");
        } else if(url.toString().contains(".wav") || url.toString().contains(".mp3")) {
            // WAV audio file
            intent.setDataAndType(uri, "audio/x-wav");
        } else if(url.toString().contains(".gif")) {
            // GIF file
            intent.setDataAndType(uri, "image/gif");
        } else if(url.toString().contains(".jpg") || url.toString().contains(".jpeg") || url.toString().contains(".png")) {
            // JPG file
            intent.setDataAndType(uri, "image/jpeg");
        } else if(url.toString().contains(".txt")) {
            // Text file
            intent.setDataAndType(uri, "text/plain");
        } else if(url.toString().contains(".3gp") || url.toString().contains(".mpg") || url.toString().contains(".mpeg") || url.toString().contains(".mpe") || url.toString().contains(".mp4") || url.toString().contains(".avi")) {
            // Video files
            intent.setDataAndType(uri, "video/*");
        } else {
            //if you want you can also define the intent type for any other file

            //additionally use else clause below, to manage other unknown extensions
            //in this case, Android will show all applications installed on the device
            //so you can choose which application to use
            intent.setDataAndType(uri, "*/*");
        }

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        context.startActivity(intent);
    }
}
Vaibhav Joshi
fonte
ou você pode alterar a condição if assim
Vaibhav Joshi
if (url.getPath (). endsWith (". jpg") || url.getPath (). endsWith (". jpeg") || url.getPath (). endsWith (". png")) {intent.setDataAndType (uri, "imagem / *"); }
Vaibhav Joshi
1
Isso só funciona no Android. Não é uma solução para todas as plataformas.
andou
1
sendo um desenvolvedor de Android, pensei que seria útil, pelo menos, para desenvolvedores de Android
Vaibhav Joshi