首页 > 解决方案 > 如何在java中以编程方式打开具有不同扩展名的文件?

问题描述

我希望你们都很好。我在这里有一个我从这个站点获取的代码,但在尝试不同的方法但没有成功后不知道如何使用,所以我想与你分享以获得解决方案。我想要的是使用这段代码在路径中打开文件,那么如何在这段代码的路径中定义这个“文件或文件”。这是代码:

Uri uri = Uri.fromFile(url);

    Intent intent = new Intent(Intent.ACTION_VIEW);
    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 {
        
        intent.setDataAndType(uri, "*/*");
    }

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);

我试图将路径定义为,"String url = "/path/here";但出现错误:Uri 类型中的 fromFile(File) 方法不适用于参数(字符串)

我试图将路径设置为File url = ("/path/here"); 并且我得到错误:无法解析上下文

标签: javaandroid

解决方案


最好的解决方案可能是使用构建一次然后查找扩展的地图。

private static final Map<String, String> FILE_TYPES;

// Static code blocks will only run once during the program's lifetime
// to initialize static fields
static {
    FILE_TYPES = new HashMap<>();

    // Word document
    FILE_TYPES.put("doc", "application/msword");
    FILE_TYPES.put("docx", "application/msword");

    // PDF file
    FILE_TYPES.put("pdf", "application/pdf");

    // Etc.
}

假设您没有任何名称中包含多个点的扩展名(如.tar.gz),您还可以获得一个子字符串并进行简单的查找。

String urlStr = url.toString();
String extension = urlStr.substring(urlStr.lastIndexOf("."));

intent.setDataAndType(uri, FILE_TYPES.getOrDefault(extension, "*/*"));

推荐阅读