Android之File操作权限
来源:互联网 发布:网络传销犯罪典型案例 编辑:程序博客网 时间:2024/05/29 19:39
一、File类
Java提供了一套完整的I/O流体系,包括FileInputStream、FileOutputStream等,Android中同样也有类似方法来访问手机存储器上的文件。
openFileOutput(String name)和openFileInput(String name, int mode)分别返回FileOutputStream类和FileInputStream类。由于操作简单,以下代码来自互联网:
private String read(){try{// 打开文件输入流FileInputStream fis = openFileInput(FILE_NAME);byte[] buff = new byte[1024];int hasRead = 0;StringBuilder sb = new StringBuilder("");// 读取文件内容while ((hasRead = fis.read(buff)) > 0){sb.append(new String(buff, 0, hasRead));}// 关闭文件输入流fis.close();return sb.toString();}catch (Exception e){e.printStackTrace();}return null;}private void write(String content){try{// 以追加模式打开文件输出流FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);// 将FileOutputStream包装成PrintStreamPrintStream ps = new PrintStream(fos);// 输出文件内容ps.println(content);// 关闭文件输出流ps.close();}catch (Exception e){e.printStackTrace();}}
二、读写SD卡文件
上述方法中,需要注意的有一点,FileInputStream fis = openFileInput(FILE_NAME);这句话中,FILE_NAME为文件名,其不包含该文件的路径,那么程序默认打开的都是应用程序的数据文件夹里的文件,很多时候,我们需要读写的是SD卡上的文件。android中,SD卡的默认路径是“/mnt/sdcard/”。
读写SD卡的步骤如下:
(1)调用Environment的getExternalStorageState()方法判断是否插入SD卡,以及是否具有SD卡读取权限。
(2)调用Environment的getExternalStorageDirectory()方法获取外部存储器,也就是SD卡的目录。
(3)调用FileInputStream、FileOutputStream、FileReader或FilderWriter读写SD卡的文件。
File file = new File("/mnt/sdcard/");if(file.exists()) { File[] currentFiles = file.listFile(); // WHAT YOU WANT TO DO }还有一点不能忘记,那就是读写SD的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
(注意其在AndroidManifest.xml中的位置)
三、修改文件权限
终于说到重点啦。
用过Linux系统的童鞋一定对Linux系统的权限控制比较了解,Android的内核就是Linux,因此,Android系统中文件的权限也是一个很有趣的东西。
首先,要说明的就是通过adb shell来查看系统的文件(在Windows系统中无法看到Android系统的文件组织结构?)
这里说明两个目录:/data和/mnt。/data是我们的应用程序存储数据地方,比如在Eclipse中的File Exploer中看到的/data/data/PACKAGE_NAME/FILE_FOLDER(该路径为其绝对路径)。
在该shell中,由于其内核是Linux的,所以,把它当做Linux来用吧,ls,mkdir,cp……
还有一个问题需要重点说明,那就是在程序中修改文件的访问权限,先看下面的代码:
/* Check access permission */if (!device.canRead() || !device.canWrite()) {try {/* Missing read/write permission, trying to chmod the file */Process su;su = Runtime.getRuntime().exec("/system/bin/su");String cmd = "chmod 666 " + device.getAbsolutePath() + "\n"+ "exit\n";su.getOutputStream().write(cmd.getBytes());if ((su.waitFor() != 0) || !device.canRead()|| !device.canWrite()) {throw new SecurityException();}} catch (Exception e) {e.printStackTrace();throw new SecurityException();}}其中的device为File类的对象。注意,此操作是不提倡的,因为修改了文件的权限后,可能导致其他本来没有访问权限的应用访问甚至修改此文件,导致错误。
留一个问题共探讨:在Android应用中,如果一个AppA需要访问另一个AppB的数据库文件(SQLite文件,路径为/data/data/AppB/databases/xxx.db),AppA的路径为/data/data/AppA,此时应该怎么办呢?能访问到吗?通过修改权限能实现吗?
- Android之File操作权限
- Android入门之文件系统/File操作
- Android开发常用工具类之File操作
- Android开发常用工具类之File操作
- android之File文件简单操作
- MySQL权限篇之FILE
- javaIO操作之File
- android 文件操作FILE
- file 操作 -android
- Android文件操作File
- Android File简单操作
- Linux之权限操作
- Android问题之AS的DDMS打不开、file explorer文件权限问题
- java温故而知新之File操作
- Java IO 之File操作
- Java IO 之File操作
- HTML5之File文件操作
- HTML5 之文件操作(file)
- Validate Binary Search Tree
- 冒泡和选择(从大到小排序)
- 火狐浏览器设置背景图片
- C++的快排与upper_bound()和lower_bound()
- 支付宝sign 与 mysign 返回值不一致 的 bug
- Android之File操作权限
- Android如何通过shareduserid获取系统权限
- vector模板类的成员函数
- 在vc中使用sqlite3数据库
- 初学java
- 弹出框无论如何点都做同样的事情
- Codeforces Round#250 D. The Child and Zoo(并差集)
- 从epoll构建muduo-13 Reactor + ThreadPool 成型
- 分支-15. 日K蜡烛图(15)