Android的File存储方式分为两种,一种是保存在手机内存中,一种是保存在移动存储设备中(如SD卡)
前者默认是私有的,即只有本应用程序能使用,当然,可以通过设置Mode来修改权限.其保存的内容会随着应用程序的卸载而被清除,放置在/data/data/com.***/files目录下
后者是公用的(world-readable),只要有访问设备的权限,就可以对其中的内容进行读写操作,同时其中的内容能随时被清除.
内存储(私有)
/*读文件*/
FileInputStream fis = null;
try {
fis = openFileInput("myfile1.txt");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = fis.read(buffer))>-1){
bos.write(buffer, 0, len);
}
String temp = bos.toString();
Log.e("abc", temp);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(fis != null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*写文件*/
FileOutputStream fos = null;
try {
fos = openFileOutput("myfile1.txt", 0);
fos.write("hello world".getBytes());
} catch (Exception e) {
e.printStackTrace();
} finally{
if(fos != null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
外存储(SD卡)
检查手机上是否有额外的存储设备
调用Environment.getExternalStorageState()返回当前设备的状态
MEDIA_REMOVED:找不到设备
MEDIA_UNMOUNTED:设备尚未安装
MEDIA_CHECKING:检查中
MEDIA_NOFS:设备无效或不被支持
MEDIA_MOUNTED:能获取到设备,并接受读写操作
MEDIA_MOUNTED_READ_ONLY:能获取到设备,但只接受读操作
MEDIA_SHARED:设备尚未安装,但能通过USB设备来存储,例如与PC连接
MEDIA_BAD_REMOVAL:设备安装过,但被错误删除了
MEDIA_UNMOUNTABLE:找到设备,但安装不了
(这里的状态只是通过源代码获得,并未进行测试)
可以看出只有当状态为MEDIA_MOUNTED或者MEDIA_MOUNTED_READ_ONLY才能进行读写操作
下面是判断设备状态及获得sdcard路径的代码片段:
boolean canRead = false;
boolean canWrite = false;
String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)){
canRead = canWrite = true;
}else if(Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
canRead = true;
canWrite = false;
}else{
canRead = canWrite = false;
}
File root = Environment.getExternalStorageDirectory();//获得sdcard的根目录
File dir = new File(root+"/"+Environment.DIRECTORY_DOWNLOADS);
//File dir = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);//跟上面是一样的
if(!dir.exists()){
dir.mkdirs();
}
Log.e("path", "path="+dir.getAbsolutePath());
File file = new File(dir, "text.txt");//在sdcard里新建一个文本文件
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
最后,对sd卡进行操作需要设置权限,可在AndroidManifest.xml文件里添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>