0%

Android文件操作

文件操作

安卓下面操作文件其实也就是类似于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"
/><!-- 在外部存储设备有写权限(SD卡) -->

这个是写的,相对于读的话呢,我们是不需要给的,但是安卓也给了个常亮,也就是那个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 {
/*
* 正斜杠代表根目录
* /data/data/ 文件本机路径
* */
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("/data/data/com.example.android_study11/hello.txt");
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进行操作。