Cách mở tệp bằng chương trình liên kết mặc định


86

Làm cách nào để mở tệp bằng chương trình liên kết mặc định trong Java? (ví dụ: một tệp phim)


Nếu bạn đang sử dụng, JavaFXhãy vào đây hoặc vào đây .
Sedrick

Câu trả lời:


136

Bạn có thể sử dụng Desktop.getDesktop().open(File file). Xem câu hỏi sau để biết các tùy chọn khác: " [Java] Cách mở trình chỉnh sửa ưu tiên của hệ thống người dùng cho tệp đã cho? "


1
Tôi tiếp tục nhận được ngoại lệ này khi thử với tệp phim nhưng nó hoạt động với tệp hình ảnh (bmp): java.io.IOException: Không mở được tệp: / D: /vidz/2006-04-02.wmv. Thông báo lỗi: Tham số không chính xác.
Frederic Morin

Bạn có thể cung cấp mã của bạn trong câu hỏi? Ngoài ra, bạn đang sử dụng phiên bản hệ điều hành và Java nào?
Zach Scrivena

những gì tôi không hiểu là nó hoạt động với hình ảnh ... dù sao thì tôi đang sử dụng Java 1.6.0.06 và đây là mã: File file = new File (MoviePlay.getInstance (). getBasePath (), movieFile.getPath () ); thử {Desktop.getDesktop (). open (tệp); } catch (ví dụ) {...}
Frederic Morin

5
Tôi biết đã lâu nhưng ... vấn đề là do máy của tôi. Giả định chương trình mặc định trong Windows XP của tôi không ổn và tôi đang gặp sự cố trong các chương trình khác. Tôi đã thử với các máy khác kể từ đó và phương pháp này hoạt động tốt! Đã được chấp nhận !
Frederic Morin

7
Thêm vào câu trả lời cũ này; .edit()cũng có thể được sử dụng nếu mục đích mở là để chỉnh sửa. Một số hệ thống có các ứng dụng mặc định khác nhau để xem và chỉnh sửa; .open()sẽ mở trình xem.
Jason C

0

SwingHacks có một giải pháp cho các phiên bản Java cũ hơn.

Tôi nghĩ rằng họ đã sử dụng đối tượng Runtime để thực hiện lệnh 'bắt đầu' trên windows và có một lệnh tương tự trên mac.


-8

Của bạn đây:

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

Tạo một lớp khác trong gói:

// 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);
    }
}

hoặc bạn có thể thay đổi điều kiện if như thế này
Vaibhav Joshi

if (url.getPath (). endWith (". jpg") || url.getPath (). endWith (". jpeg") || url.getPath (). endWith (". png")) {Ý định.setDataAndType (uri, "hình ảnh / *"); }
Vaibhav Joshi

1
Điều này chỉ hoạt động trên Android. Nó không phải là một giải pháp cho tất cả các nền tảng.
andred

1
là một nhà phát triển Android tôi nghĩ rằng nó sẽ giúp ích cho các nhà phát triển ít nhất android
Vaibhav Joshi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.