前者默认是私有的,即只有本应用程序能使用,当然,可以通过设置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"/>