这个是别人的代码,自己忘了地址,只是给自己记录插个眼

获取本地文件
在MainActivity 中写方法

 /*** android 打开本地文件* @param path    本地文件路径(带文件名)*/public void openFileNew(String path, Context context) {try {File file = new File(path);Uri uri = null;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//24 android7uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file);} else {uri = Uri.fromFile(file);}context.grantUriPermission(context.getPackageName(), uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);Intent intent2 = new Intent("android.intent.action.VIEW");intent2.addCategory("android.intent.category.DEFAULT");intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent2.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);Log.d("sss", "opneFile: uri " + uri.toString());String type = AndroidFileUtil.getMIMEtype(path);intent2.setDataAndType(uri, type);context.startActivity(intent2);} catch (Exception e) {Log.d("sss", "loadAccessorySuccess: error " + e.toString());}}

再写获取文件类型的方法

public class AndroidFileUtil {public static String getMIMEtype(String path){String type="*/*";//获取后缀名前的分隔符“.”在fileName中的位置int dotIntex=path.lastIndexOf(".");if(dotIntex<0){return type;}/*获取文件的后缀*/String fileType=path.substring(dotIntex,path.length()).toLowerCase();if(fileType==null||"".equals(fileType)){return  type;}//在MIME和文件类型的匹配表中找到对应的mime 类型for(int i=0;i<MIME_MapTable.length;i++){if(fileType.equals(MIME_MapTable[i][0])){type=MIME_MapTable[i][1];}}return type;}private static final String[][] MIME_MapTable = {//{后缀名,    MIME类型}{".3gp", "video/3gpp"},{".apk", "application/vnd.android.package-archive"},{".asf", "video/x-ms-asf"},{".avi", "video/x-msvideo"},{".bin", "application/octet-stream"},{".bmp", "image/bmp"},{".c", "text/plain"},{".class", "application/octet-stream"},{".conf", "text/plain"},{".cpp", "text/plain"},{".doc", "application/msword"},{".docx", "application/msword"},{".exe", "application/octet-stream"},{".gif", "image/gif"},{".gtar", "application/x-gtar"},{".gz", "application/x-gzip"},{".h", "text/plain"},{".htm", "text/html"},{".html", "text/html"},{".jar", "application/java-archive"},{".java", "text/plain"},{".jpeg", "image/jpeg"},{".jpg", "image/jpeg"},{".js", "application/x-javascript"},{".log", "text/plain"},{".m3u", "audio/x-mpegurl"},{".m4a", "audio/mp4a-latm"},{".m4b", "audio/mp4a-latm"},{".m4p", "audio/mp4a-latm"},{".m4u", "video/vnd.mpegurl"},{".m4v", "video/x-m4v"},{".mov", "video/quicktime"},{".mp2", "audio/x-mpeg"},{".mp3", "audio/x-mpeg"},{".mp4", "video/mp4"},{".mpc", "application/vnd.mpohun.certificate"},{".mpe", "video/mpeg"},{".mpeg", "video/mpeg"},{".mpg", "video/mpeg"},{".mpg4", "video/mp4"},{".mpga", "audio/mpeg"},{".msg", "application/vnd.ms-outlook"},{".ogg", "audio/ogg"},{".pdf", "application/pdf"},{".png", "image/png"},{".pps", "application/vnd.ms-powerpoint"},{".ppt", "application/vnd.ms-powerpoint"},{".prop", "text/plain"},{".rar", "application/x-rar-compressed"},{".rc", "text/plain"},{".rmvb", "audio/x-pn-realaudio"},{".rtf", "application/rtf"},{".sh", "text/plain"},{".tar", "application/x-tar"},{".tgz", "application/x-compressed"},{".txt", "text/plain"},{".wav", "audio/x-wav"},{".wma", "audio/x-ms-wma"},{".wmv", "audio/x-ms-wmv"},{".wps", "application/vnd.ms-works"},//{".xml",    "text/xml"},{".xml", "text/plain"},{".xls", "application/vnd.ms-excel"},{".xlsx", "application/vnd.ms-excel"},{".z", "application/x-compress"},{".zip", "application/zip"},{"", "*/*"}};
}

这时还未结束
还需要进行配置
在res 目录下创建xml 文件夹
创建filepaths.xml 文件

filepaths 中的内容为

<paths xmlns:android="http://schemas.android.com/apk/res/android"><external-path name="external" path="."/>
</paths>

在AndroidManifest.xml 文件中增加

<providerandroid:authorities="你的包名.fileprovider"android:name="androidx.core.content.FileProvider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/filepaths" /></provider>


当然最后还需要添加权限,高版本需要动态申请权限了

AndroidManifest.xml 中进行添加权限

    <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在MainActivity 中动态申请权限方式

在onCreate 中添加

   //读写权限private static String[] PERMISSIONS_STORAGE = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE};//请求状态码private static int REQUEST_PERMISSION_CODE = 1;
   if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE);}}

然后就OK了

android 打开本地文件相关推荐

  1. android本地xml文件怎么打开,android 打开本地文件

    首先要知道的是,Android 打开本地文件是根据类型打开的,也就是根据文件的 MIME 类型来确定 如果不知道是什么类型,那就是 : */* 类型匹配表: private static final ...

  2. Android实现打开本地文件,Android 打开本地文件(示例代码)

    Android 打开本地的文件,目前来说,其实很常见.而且现在有手机版的office了.查看office的全家桶就更加方便. 首先要知道的是,Android 打开本地文件是根据类型打开的,也就是根据文 ...

  3. Android调用系统安装程序打开本地文件(包括 Android7.0以上)

    前言 在 Android 手机文件管理中,点击某个文件的时候,会弹出选择打开文件的方式,那么,如果在我们自己的软件中要实现这种效果该怎么做呢?其实 Android 打开本地文件很常见,打开的时候会根据 ...

  4. 服务器读取本地文件,如何在云服务器上打开本地文件

    如何在云服务器上打开本地文件 内容精选 换一换 边缘节点上报应用日志和系统日志需要打开日志开关,且边缘节点的NTP与华为云一致.如果看不到日志,可能有如下原因:日志开关未打开.登录IEF控制台,在左侧 ...

  5. 服务器怎么打开本地电脑文件夹,如何在云服务器上打开本地文件夹

    如何在云服务器上打开本地文件夹 内容精选 换一换 Tomcat是一个被广泛使用的Java Web应用服务器.本文介绍了在华为云弹性云服务器上部署Java Web环境的操作步骤.首先需要下载部署Java ...

  6. 用QFileDialog::getOpenFileUrls打开本地文件:指定路径

    QString openFilePath = "file:///" + ProcessingModuleProxy::getInstance().getImportPath();Q ...

  7. Element-UI中打开本地文件

    Element-UI中打开本地文件 一.问题 二.html部分 三.js部分 四.上一个/下一个 一.问题 有时候我们要打开本地文件直接在页面上查看,怎么用Element-UI提供的功能实现? 二.h ...

  8. 在excel中打开本地文件或文件夹

    效果演示: A2中输入本地文件或文件夹绝对路径 B2中输入公式 =HYPERLINK(A2)  然后回车保存,再次点击B2中的链接会直接打开本地文件夹或文件

  9. java web打开文件_Java web 如何打开本地文件夹?

    使用情景 有一个只在一台 Windows7 上使用的 Java web 项目,浏览器是 Chrome.它需要点击一个链接可以打开指定的本地文件夹,目录会有中文. 服务器环境 Jdk1.7.Tomcat ...

最新文章

  1. java二维数组从键盘更改_互换二维数组的行列。要求数组的行数、列数以及各元素均从键盘输入;输出互换前数组内容和互换后数组内容。(要求循环输入进行测试)Java...
  2. 批量下载的实现及java.lang.IllegalStateException异常
  3. python 一次编辑
  4. 获取IOS应用的子目录
  5. python爬虫反爬机制_浅谈爬虫及绕过网站反爬取机制之Python深度应用
  6. python不同目录调用_python3 不同目录间模块调用
  7. 分布式理论-CAP定理
  8. 06-02 Jenkins job 机制
  9. 外部操作获取iframe的东西
  10. EasyDarwin接口的使用——使用C++编写客户端实现与EasyDarwin服务器的交互
  11. 如何绘制一幅优雅的列线图
  12. Linux系统Ubuntu安装kvaser Leaf Light V2驱动
  13. videojs创建control-bar组件,实现点击播放下一视频
  14. ffmpeg转mov为mp4
  15. 苹果系统下载了python软件怎么卸载_mac怎么卸载pycharm
  16. 苹果cms是什么东西?
  17. Eigen学习3:矩阵及向量运算
  18. CAD二次开发——通过Ribbon界面来运行程序
  19. Python之freshman07 面向对象编程jinjie
  20. Excel表格防止重复录入数据

热门文章

  1. 什么是接口测试?为什么要做接口测试?【建议收藏】
  2. 非root用户安装python_zzw_非root用户安装python3.5
  3. zzw原创_oracle循环中的异常捕捉_捕捉异常后并继续循环
  4. oracle怎么测试包,Oracle内置IO测试包dbms_resource_manager.CALIBRATE_IO
  5. 微信阅读量10万+文章是怎样炼成的?
  6. 基于3Ds Max实现客厅的设计与实现.docx(毕业设计、成绩评定评分表、成绩评定评审等级表)
  7. 2021年高考成绩长兴中学查询,长兴中学2018高考喜报
  8. vue如何通过Nginx代理做到跨域访问API接口 解决404报错
  9. 苏州新区c语言培训,苏州哪些地方可以培训C语言
  10. 揭密网站百度快照不更新原因