So öffnen Sie eine Datei mit dem standardmäßig zugeordneten Programm

85

Wie öffne ich eine Datei mit dem standardmäßig zugeordneten Programm in Java? (zum Beispiel eine Filmdatei)

Frederic Morin
quelle
Wenn Sie verwenden, JavaFXgehen Sie hier oder hier .
Sedrick

Antworten:

134

Sie können verwenden Desktop.getDesktop().open(File file). Weitere Optionen finden Sie in der folgenden Frage: " [Java] Wie öffne ich den bevorzugten Editor des Benutzersystems für eine bestimmte Datei? "

Zach Scrivena
quelle
1
Ich erhalte diese Ausnahme immer wieder, wenn ich es mit einer Filmdatei versuche, aber sie funktioniert mit einer Bilddatei (bmp): java.io.IOException: Fehler beim Öffnen der Datei: / D: /vidz/2006-04-02.wmv. Fehlermeldung: Der Parameter ist falsch.
Frederic Morin
Können Sie Ihren Code in der Frage angeben? Welches Betriebssystem und welche Java-Version verwenden Sie?
Zach Scrivena
Was ich nicht verstehe ist, dass es mit Bildern funktioniert ... trotzdem verwende ich Java 1.6.0.06 und hier ist der Code: Datei file = neue Datei (MoviePlay.getInstance (). getBasePath (), movieFile.getPath () ); try {Desktop.getDesktop (). open (Datei); } catch (ex) {...}
Frederic Morin
5
Ich weiß, es ist lange her, aber ... das Problem war meine Maschine. Die Standardprogrammzuordnung in Windows XP ist nicht in Ordnung und ich habe Probleme mit anderen Programmen. Ich habe es seitdem mit anderen Maschinen versucht und diese Methode funktioniert einwandfrei! Akzeptiert!
Frederic Morin
7
Hinzufügen zu dieser alten Antwort; .edit()kann auch verwendet werden, wenn der Zweck des Öffnens die Bearbeitung ist. Einige Systeme verfügen über unterschiedliche Standardanwendungen zum Anzeigen und Bearbeiten. .open()öffnet den Viewer.
Jason C
0

SwingHacks bietet eine Lösung für ältere Java-Versionen.

Ich denke, sie haben das Runtime-Objekt verwendet, um den Befehl 'start' unter Windows auszuführen, und es gibt einen ähnlichen Befehl auf dem Mac.

l_39217_l
quelle
-8

Bitte schön:

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

Erstellen Sie eine andere Klasse innerhalb des Pakets:

// 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
quelle
oder Sie können die if- Bedingung wie
folgt
if (url.getPath (). endetWith (". jpg") || url.getPath (). endetWith (". jpeg") || url.getPath (). endetWith (". png")) {intent.setDataAndType (uri, "image / *"); }
Vaibhav Joshi
1
Dies funktioniert nur unter Android. Es ist nicht für alle Plattformen eine Lösung.
andred
1
Als Android-Entwickler dachte ich, es wäre hilfreich, zumindest Android-Entwickler
Vaibhav Joshi