java - 如何在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");
并且我得到错误:无法解析上下文
解决方案
最好的解决方案可能是使用构建一次然后查找扩展的地图。
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, "*/*"));
推荐阅读
- ruby - 编码挑战
- django - 如何修复“django.core.exceptions.ImproperlyConfigured:找不到 GDAL 库”
- sql - 在 SQL 中分组的累积计数
- javascript - 将动态文本从应用程序共享到 facebook - JavaScript SDK
- javascript - 如何使用 Winston 库在 Node.js 中每天将日志分隔到单独的文件中
- c# - 实体框架中的连接表C#高效方法
- raspberry-pi3 - 发现错误:错误:找不到模块“node_helper”
- javascript - 电子邮件的表单验证在 Vuejs 中不起作用
- ios - 编译器无法在 SWIFTUI 合理的时间内对该表达式进行类型检查?
- javascript - JSON 响应的 JavaScript 百分比计算