文件操作
安卓下面操作文件其实也就是类似于Linux下的文件操作,有权限就能操作,没权限就不能操作。
文件路径获取
首先我们先要获取文件的路径,可以通过这三个API函数。
1 2 3 4 5 6
| File file = Environment.getExternalStorageDirectory(); File file1 = getCacheDir(); File file2 = getFilesDir(); Log.d("SD", file.getPath()); Log.d("File Dir", file2.getPath()); Log.d("File 缓存", file1.getPath());
|
第一个是SD卡的目录,第二个是我们APP默认存储的目录,第三个就是我们APP缓存的一个目录。
一般我们要用的就是SD卡,但是如果我们要操作SD卡的话呢,我们需要给我们的程序操作SD卡的权限:
1 2 3
| <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
这个是写的,相对于读的话呢,我们是不需要给的,但是安卓也给了个常亮,也就是那个write换成read,貌似不需要用到。
判断有无SD卡
1 2 3 4 5 6 7 8 9 10
| private void existSDcard() { String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { Log.d("SD", "有"); }else { Log.d("SD", "有"); } }
|
可以看到就是通过那个环境类的函数判断的,最后比较字符串是不是相等。
读写文件
和javaSE是一样的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| private void Write() { FileOutputStream out = null; try {
File file = Environment.getExternalStorageDirectory(); File file1 = getCacheDir(); File file2 = getFilesDir(); Log.d("SD", file.getPath()); Log.d("File Dir", file2.getPath()); Log.d("File 缓存", file1.getPath()); out = new FileOutputStream(file.getPath()+"Wker.txt"); out.write("132".getBytes()); } catch (IOException e) { e.printStackTrace(); }finally { if(out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
private void Read () { FileInputStream in = null; try { in = new FileInputStream("/data/data/com.example.android_study11/hello.txt"); byte[] bytes = new byte[2014]; int len = in.read(bytes); Log.d("Wker", new String(bytes,0,len)); } catch (IOException e) { e.printStackTrace(); }finally { if(in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
|
就是基本的文件流操作,/data/data/com.example.android_study11/
这个路径不是固定的,最好通过那个获取的函数获取。
而且如果有的时候我们还是无法读取文件,可能是文件权限不够,我们需要修改权限,就和Linux上面的一样,chmod修改权限就好,但是如果真机没有ROOT权限的话呢我们就需要先ROOT,然后用sudo进行操作。