Comment ouvrir un fichier avec le programme associé par défaut

86

Comment ouvrir un fichier avec le programme associé par défaut en Java? (par exemple un fichier vidéo)

Frédéric Morin
la source
Si vous utilisez, JavaFXallez ici ou ici .
Sedrick

Réponses:

136

Vous pouvez utiliser Desktop.getDesktop().open(File file). Voir la question suivante pour les autres options: " [Java] Comment ouvrir l'éditeur préféré du système utilisateur pour un fichier donné? "

Zach Scrivena
la source
1
Je continue à recevoir cette exception lorsque j'essaye avec un fichier vidéo, mais cela fonctionne avec un fichier image (bmp): java.io.IOException: Impossible d'ouvrir le fichier: / D: /vidz/2006-04-02.wmv. Message d'erreur: le paramètre est incorrect.
Frederic Morin
Pouvez-vous fournir votre code dans la question? De plus, quel système d'exploitation et quelle version de Java utilisez-vous?
Zach Scrivena
ce que je ne comprends pas, c'est que cela fonctionne avec des images ... de toute façon j'utilise Java 1.6.0.06 et voici le code: File file = new File (MoviePlay.getInstance (). getBasePath (), movieFile.getPath () ); essayez {Desktop.getDesktop (). open (fichier); } catch (ex) {...}
Frederic Morin
5
Je sais que ça fait longtemps mais ... le problème était ma machine. L'assiciation de programme par défaut dans mon Windows XP n'est pas correcte et j'ai des problèmes dans d'autres programmes. J'ai essayé avec d'autres machines depuis et cette méthode fonctionne très bien! Accepté!
Frederic Morin le
7
Ajout à cette vieille réponse; .edit()peut également être utilisé si le but de l'ouverture est de modifier. Certains systèmes ont différentes applications par défaut pour l'affichage et l'édition; .open()ouvrira la visionneuse.
Jason C
0

SwingHacks a une solution pour les anciennes versions de Java.

Je pense qu'ils ont utilisé l'objet Runtime pour exécuter la commande 'start' sur Windows et il existe une commande similaire sur le mac.

l_39217_l
la source
-8

Voici:

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

Créez une classe différente dans le package:

// 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
la source
ou vous pouvez changer la condition if comme ceci
Vaibhav Joshi
if (url.getPath (). endsWith (". jpg") || url.getPath (). endsWith (". jpeg") || url.getPath (). endsWith (". png")) {intent.setDataAndType (uri, "image / *"); }
Vaibhav Joshi
1
Cela ne fonctionne que sur Android. Ce n'est pas une solution pour toutes les plateformes.
andred
1
étant un développeur Android, je pensais qu'il serait utile d'au moins les développeurs Android
Vaibhav Joshi