获取的文件位置
获取内部文件,也就是只能供自己使用的文件
- File getFilesDir()
获取/data/data/packagename/files目录 - FileInputStream openFileInput(String name)
打开现有文件进行读取;name指定文件,不能添加路径 - FileOutputStream openFileOutput(String name, int mode)
打开现有文件进行写入,不存在就创建;name指定文件,不能添加路径;默认创建在files目录下 - File getDir(String name, int mode)
获取/data/data/packagename/自定义目录,没有就创建;name为自定义目录名 - String[] fileList()
获取/data/data/packagename/files目录下的文件列表,可以配合open方法进行操作 - File getCacheDir()
获取/data/data/packagename/cache目录;需要即时清理
mode的4种模式:
Context.MODE_PRIVATE 私有化,并且覆盖原内容
Context.APPEND 追加
Context.MODE_WORLD_READABLE 可读
Context.MODE_WORLD_WRITEABLE 可写
获取外部文件,也就是可以供其他程序一起使用的文件
- File getExternalCacheDir()
获取主外部储存上的缓存文件目录;同样需要即时清理 - File[] getExternalCacheDirs()
获取多个外部储存上的缓存文件目录 - File getExternalFilesDir(String str)
获取主外部储存上存放常规文件的文件目录;str指定特定内容类型的子目录;特定类型用DIRECTORY_为前缀,定义在Environment中,比如Environment.DIRECTORY_PICTURES,换句话说,外部储存有对文件进行分类,而内部储存没有 - File[] getExternalFilesDirs(String str)
获取主外部储存上指定类型的所有文件目录 - File[] getExternalMediaDirs()
获取Android储存图片、视频和音乐文件的所有外部文件目录;无需指明文件类型,只要是图片、视频和音乐类型的多媒体文件目录就可以获取
为类的每个对象创建获取自己对应图片的文件名称的方法
比如:
public String getPhotoFilename(){
return "IMG_" + getId().toString() + ".jpg";
}
获取添加了文件的指定目录路径
比如:
public File getPhotoFile(NoteBody noteBody){
File externalFilesDir = mContext.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
if (externalFilesDir == null){
return null;
}
return new File(externalFilesDir, noteBody.getPhotoFilename());
}
记得添加权限
拍照
触发拍照很容易,使用定义在MediaStore里的ACTION_IMAGE_CAPTURE创建Intent,用Intent隐式响应就可以了。
如何让拍照获得的图片保存到我们指定的目录下的文件里呢?
1.创建指定储存目录和文件名称的File对象;
2.用File对象创建Uri;
3.创建开启拍照的隐式intent;
4.将Uri储存进intent里,指定的key为MediaStore.EXTRA_OUTPUT;
5.用startAcitivyForResult开启拍照;
6.在onActivityResult里判断处理,比如读取文件里的照片并显示出来。
拍照需要考虑一种情况,就是手机是否具有拍照功能,可以在manifest文件里进行硬件的声明:
<uses-feature android:name = "android.hardware.camera"
android:required = "false" />