文件数据储存之外部储存
Android官方Api:每个兼容 Android 的设备都支持可用于保存文件的共享“外部存储”。 该存储可能是可移除的存储介质(例如 SD 卡)或内部(不可移除)存储。 保存到外部存储的文件是全局可读取文件,而且,在计算机上启用 USB 大容量存储以传输文件后,可由用户修改这些文件。
详解: 外部存储中的文件可以被用户或者其他应用程序读写的,其中有两种类型的文件。
(1).公共文件public fies这类文件可被自由访问,当应用被卸载之后,文件仍然保留。比如相机类应用被卸载后,照片仍然存在。公共文件有9大类,均为系统创建的文件夹,详细如下:
文件夹类型包括:
- DCIM : 数字相机拍摄的照片
- Music:用户音乐
- Podcasts:音频/视频的剪辑片段
- Ringtones:铃声
- Alarms:闹钟的声音
- Notification:通知
- Pictures:所有的图片(不包括那些用照相机拍摄的照片)
- Movies:所有的电影(不包括那些用摄像机拍摄的视频)和Download/其他下载的内容。
使用外部存储数据需要在应用程序中设置访问SD卡的权限,在AndroidManifest.xml中添加权限
<!-- 在sd卡中创建和删除文件权限-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往sd卡写入数据权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 从sd卡读取数据权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
首先判断是否存在可用的SD卡,Environment.getExternalStorageState()方法获取当前设备的状
态,判断是否为Environment.MEDIA_MOUNTED状态。
//判断SD卡是否存在if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//记得最后要调用保存文件的方法实现保存Toast.makeText(getApplicationContext(),"sd卡存在",Toast.LENGTH_LONG).show();}else{Toast.makeText(getApplicationContext(), "sd卡不存在", Toast.LENGTH_LONG).show();}
存储的文件路径使用Environment.getExternalStorageDirectory()方法获取当SD卡的根目录,进而访问相应的文件。创建公有文件的方法 :
File file=new File(Environment.getExternalStorageDirectory(),“boreseven”);
第二个参数为自己设置的名字
(2).私有文件Private files在应用被卸载后,私有文件也会被删除,类似与内部储存。获得外部储存私有文件路径的方法Context.getExternalFilesDir(),如:
如:File file = new File(this.getExternalFilesDir(Environment.DIRECTORY_PICTURES), “boreseven”);
下面小提一下两个方法:
1.保存文件到SD卡:
//保存文件到SD卡public void saveToSDCard(String filename,String content){File file=new File(Environment.getExternalStorageDirectory(),filename);try {FileOutputStream outputStream=new FileOutputStream(file);outputStream.write(content.getBytes());outputStream.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
2.读取SD卡文件:
//读取SD卡文件public String readFileSdcard(String filename){String res="";try {FileInputStream myfin=new FileInputStream(filename);int length=myfin.available();byte [] buff=new byte[length];myfin.read(buff);res= new String(buff, "UTF-8");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return res;}
拓展:点击按钮下载图片,可在系统相册中显示。
记得要添加权限,代码如下:
xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"/><Buttonandroid:id="@+id/mybutton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:text="保存" /></RelativeLayout>
java文件:
public class MainActivity extends Activity {private ImageView imageView;private Button mybutton;private Handler handler;private String URL="https://www.baidu.com/img/bd_logo1.png";//百度首页图片地址@Overrideprotected void onCreate(final Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();handler=new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {switch (msg.what){case 1://成功byte[]result= (byte[]) msg.obj;final Bitmap bitmap=BitmapFactory.decodeByteArray(result,0,result.length);//利用BitmapFactory将数据转换成bitmap类型imageView.setImageBitmap(bitmap);//加载图片imageView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {saveImageToGallery(MainActivity.this,bitmap);return false;}});}return false;}});OkHttpClient client=new OkHttpClient();//实例化final Request request = new Request.Builder().url(URL).build(); //传入图片网址,,URL为自己定义好的网址。client.newCall(request).enqueue(new Callback() {//实例化一个call的对象@Overridepublic void onFailure(Call call, IOException e) {}@Overridepublic void onResponse(Call call, Response response) throws IOException {Message message=handler.obtainMessage();//声明一个传递信息的Messageif (response.isSuccessful()){//成功Log.e("YF", "onResponse: "+"YES" );//一个log,可以不写message.what=1; //设置成功的指令为1message.obj=response.body().bytes();//带入图片的数据handler.sendMessage(message);//将指令和数据传出去}else{//失败Log.e("YF", "onResponse: "+"NO" );//一个log,可以不写handler.sendEmptyMessage(0);//设置其他指令为零,然后进入handler}}});}private void saveImageToGallery(Context context, Bitmap bmp) {// 首先保存图片File appDir = new File(Environment.getExternalStorageDirectory(),"desheng");if (!appDir.exists()) {appDir.mkdir();}String fileName = System.currentTimeMillis() + ".jpg";File file = new File(appDir, fileName);try {FileOutputStream fos = new FileOutputStream(file);bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);fos.flush();fos.close();} catch (FileNotFoundException e) {Toast.makeText(context, "保存失败", Toast.LENGTH_SHORT).show();e.printStackTrace();} catch (IOException e) {Toast.makeText(context, "保存失败", Toast.LENGTH_SHORT).show();e.printStackTrace();}// 其次把文件插入到系统图库try {MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(), fileName, null);Toast.makeText(context, "保存成功", Toast.LENGTH_SHORT).show();} catch (FileNotFoundException e) {Toast.makeText(context, "保存失败", Toast.LENGTH_SHORT).show();e.printStackTrace();}// 最后通知图库更新context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(new File(file.getPath()))));}private void initView() {imageView = (ImageView) findViewById(R.id.imageView);mybutton = (Button) findViewById(R.id.mybutton);}}
记得加网络权限,图片是加载的百度首页图片!!!
文件数据储存之外部储存相关推荐
- python读取dat文件写入表格_Pandas:外部文件数据导入/ 读取 (如 :csv、txt、tsv、dat、excel文件)、文件存储(to_csv、to_excel)...
一.文本文件读取 文本文件是一种由若干行字符构成的计算机文件,它是一种典型的顺序文件. csv是一种逗号分隔的文件格式,因为其分隔符不一定是逗号,又被称为字符分隔文件,文件以纯文本形式存储表格数据(数 ...
- Clickhouse外部储存表引擎(HDFS、MySQL、JDBC、Kafka、File)
目录 1. HDFS表引擎 1.1 准备工作 1.2 HDFS表负责读写 1.3 HDFS表负责读, 不负责写 2. MySQL表引擎 2.1 表引擎的基本操作 2.2 表引擎配合物化视图 3. JD ...
- 软件开发之数据的新建、储存、读取、删除
1.使用SharedPreferences处理数据的新建.储存.读取.删除 SharedPreferences保存后生成的是XML文件,内容是以节点的形势保存在文件中,SharedPreference ...
- redis储存方式以及储存数据
redis储存方式以及储存数据介绍 Redis数据基础类型有哪些? string 普通key:value储存set name xiaoliget name--->xiaoli list 有序可以 ...
- 一个不错的SQL储存过程分页,储存过程+Repeater,如果只是浏览数据的话,快就一个字...
一个不错的SQL储存过程分页,储存过程+Repeater,如果只是浏览数据的话,快就一个字 CREATE PROCEDURE SelectPagedSQL ( @SQL nvarchar(512), ...
- [Redux/Mobx] redux的数据存储和本地储存有什么区别?
[Redux/Mobx] redux的数据存储和本地储存有什么区别? Redux存储的数据本质上都是JS变量,都是在内存中的,页面刷新就会消失 本质存储是像localStorage Cookie In ...
- Android开发--文件系统中的内部存储和外部存储最全解析 附文件数据保存操作封装
文件存储 前言 文件存储 内存 内部存储 外部存储 内部存储操作 API 读写操作 外部存储操作 公共目录 私有目录 私有文件 私有缓存 文件各种操作封装 前言 众所周知,数据存储在每个应用中都会用到 ...
- PS3文件的打开新建及储存,PS4移动工具图层感念,PS5矩形选框工具组选区感念,
PS3文件的打开新建及储存 PS4移动工具图层感念 PS5矩形选框工具组选区感念
- vue xlsx 导入导出_只需三步vue实现excel文件数据提取并存为json数据
前言: 以前将excel数据导入到数据库是通过前端,将excel文件上传到后端,通过后端语言进行相应的加工将excel文件中的数据取出并存入数据库:从而实现数据库的存入流程.但是这也带来了一些问题,首 ...
最新文章
- 利用shell脚本结合hive语句进行数据加载时的优化
- 防火墙双机热备三大协议(VRRP-VGMP-HRP)原理
- 2021-05-10 矩阵AB和矩阵BA有什么联系?
- spring boot基础配置
- Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
- B端可视化:图表设计
- QML笔记-使用connect界面数据交互(qml中Designer使用)
- 秦始皇:请叫我数据治理专家
- 拿网站服务器的作用,谈在线网站服务器监控(二)之使用的基本功能要求
- 小米高管爆料:小米MIX 4相机传感器比三星GW1更好
- 数据库语句数据库学习(3)——数据库的创建与删除
- 深入解读Linux内存管理系列(5)——lowmem和highmem
- UDP SOCKET 两台电脑通信
- ETL转换工具 kettle——spoon 安装 使用
- 2021教资高中信息技术笔记知识点48页pdf
- java 根据银行卡号来获取银行名称
- OpenKG开源系列|开源知识图谱融合工具OpenEA (南京大学)
- soul显示服务器异常,soul账号状态异常是什么意思?soul账号异常操作多久解封
- 计算机中容量单位B、KB、MB、GB和TB的关系
- ABAP- INCLUDE Zxxx IF FOUND.