Android 系列笔记 二

使用路径 api 读写文件

  • getFilesDir()得到的file对象的路径是data/data/com.itheima.rwinrom2/files
    存放在这个路径下的文件,只要你不删,它就一直在
  • getCacheDir()得到的file对象的路径是data/data/com.itheima.rwinrom2/cache
    存放在这个路径下的文件,当内存不足时,有可能被删除
  • 系统管理应用界面的清除缓存,会清除cache文件夹下的东西,清除数据,会清除整个包名目录下的东西
  • 获取SD卡路径
1
Environment.getExternalStorageDirectory();

检测 SD 卡状态

1
2
3
4
5
6
7
if(Environment.getExternalStorageState().equals(Environment.MEDIA_UNKNOWN)){
//不能识别SD卡
}
//MEDIA_UNMOUNTED:SD卡存在但是没有挂载
//MEDIA_REMOVED:没有SD卡
//MEDIA_CHECKING:SD卡正在准备
//MEDIA_MOUNTED:SD卡已经挂载,可以使用

获取 SD 卡剩余可用空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//获取SD卡内存状态
File pt = Environment.getExternalStorageDirectory();
//获取手机内部存储状态
File ph = Environment.getDataDirectory();

StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();

String totalMemory = Formatter.formatFileSize(this, totalBlocks * blockSize);
String availableMemory = Formatter.formatFileSize(this, availableBlocks * blockSize);

//"总空间为:" + totalMemory + " 可用空间为:" + availableMemory;

获取当前系统版本的等级

1
if(Build.VERSION.SDK_INT >= 18){}

Linux 文件的访问权限

  • 在Android中,每一个应用是一个独立的用户
  • drwxrwxrwx
  • 第1位:d表示文件夹,-表示文件
  • 第2-4位:rwx,表示这个文件的拥有者用户(owner)对该文件的权限
    • r:读
    • w:写
    • x:执行
  • 第5-7位:rwx,表示跟文件拥有者用户同组的用户(grouper)对该文件的权限
  • 第8-10位:rwx,表示其他用户组的用户(other)对该文件的权限

openFileOutput 的四种模式

1
2
3
//创建 info.txt 文件,并指定访问权限
FileOutputStream fos = openFileOutput("info.txt", MODE_PRIVATE);
//文件路径默认为 /data/data/包名/files
  • MODE_PRIVATE: -rw-rw—-
  • MODE_APPEND: -rw-rw—-
  • MODE_WORLD_WRITEABLE: -rw-rw–w-
  • MODE_WORLD_READABLE: -rw-rw-r–

使用 SharedPreference 保存数据

1
2
3
4
5
6
7
8
//保存数据
SharedPreference sp = getSharedPreference("info", MODE_PRIVATE);
SharedPreference.Editor editor = sp.edit();
editor.put("key", "value");
editor.commit();

//读取数据 如果没有取到数据,则返回"default_value"
String value = sp.getString("key", "default_value");

序列化生成 xml 文件

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
File file = null;
FileOutputStream fos = null;
XmlSerializer xmlSerializer = Xml.newSerializer();

try {
file = new File(getApplicationContext().getFilesDir(),"persons.xml");
fos = new FileOutputStream(file);
xmlSerializer.setOutput(fos, "utf-8");

xmlSerializer.startDocument("utf-8", true);
xmlSerializer.startTag(null, "persons");

for (Person person : personList) {
xmlSerializer.startTag(null, "person");
xmlSerializer.attribute(null, "id", String.valueOf(person.getId()));

xmlSerializer.startTag(null, "name");
xmlSerializer.text(person.getName());
xmlSerializer.endTag(null, "name");

xmlSerializer.startTag(null, "age");
xmlSerializer.text(String.valueOf(person.getAge()));
xmlSerializer.endTag(null, "age");

xmlSerializer.endTag(null, "person");
}

xmlSerializer.endTag(null, "persons");

xmlSerializer.endDocument();
xmlSerializer.flush();
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null)
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}

pull 解析 xml 文件

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
File file;
FileInputStream fis=null;
XmlPullParser xmlPullParser;
Person person=null;

try{
file=new File(getApplicationContext().getFilesDir(),"persons.xml");
fis=new FileInputStream(file);
xmlPullParser=Xml.newPullParser();
xmlPullParser.setInput(fis, "utf-8");

int eventType=xmlPullParser.getEventType();

while(eventType!=XmlPullParser.END_DOCUMENT){
String tagName=xmlPullParser.getName();
switch(eventType){
case XmlPullParser.START_TAG:
if(tagName.equals("person")){
person=new Person();
person.setId(Integer.parseInt(xmlPullParser.getAttributeValue(null, "id")));
}else if(tagName.equals("name")){
person.setName(xmlPullParser.nextText());
}else if(tagName.equals("age")){
person.setAge(Integer.parseInt(xmlPullParser.nextText()));
}
break;
case XmlPullParser.END_TAG:
if(tagName.equals("person")){
personList.add(person);
}
break;
default:break;
}
eventType=xmlPullParser.next();
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(fis!=null)
fis.close();
}catch(Exception e){
e.printStackTrace();
}
}