Android对其他应用/data分区下文件的读取
2017-06-13 23:34
363 查看
最近在做一个功能,需要判断一个第三方应用/data分区下的某个文件是否存在。未root的手机是不能访问到其他应用/data分区下的文件的,我现在使用的设备已经打开了root。
Java的File类可以对文件做一系列操作。开始的思路是通过File.listFiles()来获取目标应用的子文件列表,然后对指定的文件进行exists()判断。但是当进入到包名下的一个目录时,里面的文件夹用isDirectory()和isFile()判断,返回的都是false,同时用canRead()做判断,返回的也是false。判断是文件访问权限的问题,但是通过chmod 744之后,canRead()仍然返回false。看样子通过File对/data分区的操作仍然受系统安全性限制。
后来找到了另外一种方法来判断,通过执行shell命令ls -R ,获取指定应用目录下文件的列表,从而判断文件是否存在。
这是执行shell命令的方法
调用时:
便可以获取到目标目录下所有文件的列表。
Java的File类可以对文件做一系列操作。开始的思路是通过File.listFiles()来获取目标应用的子文件列表,然后对指定的文件进行exists()判断。但是当进入到包名下的一个目录时,里面的文件夹用isDirectory()和isFile()判断,返回的都是false,同时用canRead()做判断,返回的也是false。判断是文件访问权限的问题,但是通过chmod 744之后,canRead()仍然返回false。看样子通过File对/data分区的操作仍然受系统安全性限制。
后来找到了另外一种方法来判断,通过执行shell命令ls -R ,获取指定应用目录下文件的列表,从而判断文件是否存在。
这是执行shell命令的方法
public static ArrayList execCmdsforResult(String[] cmds) { ArrayList<String> list = new ArrayList<String>(); try { Process process = Runtime.getRuntime().exec("su"); OutputStream os = process.getOutputStream(); process.getErrorStream(); InputStream is = process.getInputStream(); int i = cmds.length; for (int j = 0; j < i; j++) { String str = cmds[j]; os.write((str + "\n").getBytes()); } os.write("exit\n".getBytes()); os.flush(); os.close(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); while (true) { String str = reader.readLine(); if (str == null) break; list.add(str); } reader.close(); process.waitFor(); process.destroy(); return list; } catch (Exception localException) { } return list; }
调用时:
ArrayList<String> list = execCmdsforResult(new String[] {"cd /data/data/com.testapp", "ls -R})
便可以获取到目标目录下所有文件的列表。
相关文章推荐
- android 读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- android 读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- android 清除data/data/ 下其他应用的数据
- Android 阅读Manifest在文件Application 在与其他节点meta-data定义自己的数据
- 在Android应用中读取彩信文件
- Android应用读取Excel文件的方法
- Android之读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- android 读取SD卡或者其他地方文件功能函数
- android 读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- Android应用读取Excel文件
- Android开发系列(五):Android应用中文件的保存与读取
- Android应用作为jar包导入到其他app中资源文件找不到问题
- Android之读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- 读取其他应用的manifest文件
- 在android应用中读取系统的build.prop文件中的内容
- android应用面试宝典(下);用自定义组件控制循环组件使用bug还添加标志显示答案标志位;通过包名读取配置文件AndroidManifest.xml
- Android之读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- android应用私有存储文件的写入与读取-openFileInput 和 openFileOutput
- Android 读取清单文件<meta-data>元素的数据
- Android之读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)