对于Android系统,用户数据一般存放在SD卡当中,经常会对SD卡进行读写操作。下面直奔主题。
首先很重要的是得获得对SD卡操作的权限,读写权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
1.对SD卡操作首先获得SD卡的路径。一般有两种路径:mnt/sdcard和storage/sdcard.对于Android4.0而言,只有mnt/sdcard路径,另外还有一个路径sdcard是指向mnt/sdcard的软连接,即对sdcard的操作就是对mnt/sdcard操作,仅在mnt/sdcard当中显示;对于Android4.4的系统而言,mnt/sdcard是指向storage/sdcard的软连接,对mnt/sdcard的操作即是对storage/sdcard的操作,他们的文件结构会同步改变。对于4.0和4.4之间的Android系统,那就是一个转变的过程,就不在这里详细说明了。这里的demo是在Android4.4上进行的。获得SD卡路径方法如下:
String sdcardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
打印出来的sdcardPath:/storage/sdcard。同getPath()方法返回相同结果。
2.在SD卡上创建新文件夹(目录):
private String createDir(String dirname)
{
String fileDir = sdcardPath+File.separator+dirname+File.separator;
File file = new File(fileDir);
boolean b = file.mkdirs(); //创建路径,成功返回true,失败或者文件路径已存在返回false。
Log.i(tag, "create directory:"+fileDir);
return fileDir;
}
File创建路径还有一个方法mkdir(),从方法名就可以判断,该方法只能创建一个目录(文件夹),而mkdirs()可以创建多个嵌套路径(文件夹/文件夹),例如:dirname为“newDir”,两个方法都产生一个文件夹路径,当dirname为“newDir/newDir”时,方法mkdir()不会创建任何路径,而mkdirs()方法可以创建路径newDir/newDir。
3.从SD卡上删除文件夹。同删除文件的方法类似,只是在DDMS上对file explorer操作能够直接删除文件而不能直接删除空的文件夹。删除文件夹的前提是该文件夹为空。方法如下:
private boolean deleteDir(String dir)
{
File file = new File(sdcardPath+File.separator+dir);
if(file.exists())
{
file.delete(); //文件夹必须为空
Log.i(tag, "delete dir success!");
return true;
}
else
{
Log.i(tag, "dir didn't exist!");
return false;
}
}
4.在SD卡上创建文件。代码如下:
private File createFile(String filedir,String filename)
{
String filePath = sdcardPath+File.separator+filedir+File.separator+filename;
File file = new File(filePath);
try {
file.createNewFile();//成功返回true,文件存在或者为文件路径则返回false
} catch (IOException e) {
e.printStackTrace();
}
Log.i(tag, "filePath:"+filePath);
return file;
}
这里得说明,创建文件的前提是给定的路径(filedir)必须存在,否则无法成功创建文件。若是创建临时文件,则采用方法createTempFile()。
5.向SD卡写入数据。代码如下:
//将数据写入SD卡
private boolean writeToSDcard(File file,String data)
{
try {
OutputStream output = new FileOutputStream(file);
output.write(data.getBytes());
output.close();
return true;
}catch (IOException e) {
e.printStackTrace();
return false;
}
}
这里data是以String的形式,写入数据可以以任何形式。这里参数file采用上述创建的文件进行测试。将写入SD卡的文件通过DDMS pull到电脑上,可以查看数据。