Android数据存储之SD卡
为了更好的存取应用程序的大文件数据,应用程序需要读. 写SD卡上的文件。SD卡大大扩充手机的存储能力。
操作SD首先要加权限:
<!--在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 从SDCard读取数据权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
读写SD卡上的文件请按以下三步进行:
(1)调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,并且应用程序具有读写SD卡的权限;
(2)调用Environment的getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录;
(3)使用FileInputStream FileOutputStream FileReader或者FileWriter读写SD卡里面的文件;
下面以简单实例说明:
1.XML代码:
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:paddingBottom="@dimen/activity_vertical_margin" 6 android:paddingLeft="@dimen/activity_horizontal_margin" 7 android:paddingRight="@dimen/activity_horizontal_margin" 8 android:paddingTop="@dimen/activity_vertical_margin" 9 tools:context=".MainActivity" > 10 11 <Button 12 android:id="@+id/button1" 13 android:layout_width="match_parent" 14 android:layout_height="wrap_content" 15 android:layout_alignParentTop="true" 16 android:layout_centerHorizontal="true" 17 android:text="向SD中写入数据" /> 18 19 <Button 20 android:id="@+id/button2" 21 android:layout_width="match_parent" 22 android:layout_height="wrap_content" 23 android:layout_alignLeft="@+id/button1" 24 android:layout_below="@+id/button1" 25 android:text="从SD卡中读取数据" /> 26 27 </RelativeLayout>
2.java代码:
1 package com.example.filesd; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileOutputStream; 7 import java.io.InputStreamReader; 8 import android.os.Bundle; 9 import android.os.Environment; 10 import android.app.Activity; 11 import android.view.View; 12 import android.view.View.OnClickListener; 13 import android.widget.Button; 14 import android.widget.Toast; 15 16 public class MainActivity extends Activity { 17 private Button button; 18 private Button button2; 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_main); 23 button = (Button) this.findViewById(R.id.button1); 24 button2 = (Button) this.findViewById(R.id.button2); 25 button.setOnClickListener(new OnClickListener() { 26 @Override 27 public void onClick(View arg0) { 28 writeSDcard("Hello,恭喜您数据读取了!"); 29 } 30 }); 31 button2.setOnClickListener(new OnClickListener() { 32 @Override 33 public void onClick(View arg0) { 34 readSDcard(); 35 36 } 37 }); 38 } 39 40 // 向SD卡写入数据 41 private void writeSDcard(String str) { 42 try { 43 // 判断是否存在SD卡 44 if (Environment.getExternalStorageState().equals( 45 Environment.MEDIA_MOUNTED)) { 46 // 获取SD卡的目录 47 File sdDire = Environment.getExternalStorageDirectory(); 48 FileOutputStream outFileStream = new FileOutputStream( 49 sdDire.getCanonicalPath() + "/test.txt"); 50 outFileStream.write(str.getBytes()); 51 outFileStream.close(); 52 Toast.makeText(this, "数据保存到text.txt文件了", Toast.LENGTH_LONG) 53 .show(); 54 } 55 } catch (Exception e) { 56 e.printStackTrace(); 57 } 58 } 59 60 61 // 从SD卡中读取数据 62 private void readSDcard() { 63 StringBuffer strsBuffer = new StringBuffer(); 64 try { 65 // 判断是否存在SD 66 if (Environment.getExternalStorageState().equals( 67 Environment.MEDIA_MOUNTED)) { 68 File file = new File(Environment.getExternalStorageDirectory() 69 .getCanonicalPath() + "/test.txt"); 70 // 判断是否存在该文件 71 if (file.exists()) { 72 // 打开文件输入流 73 FileInputStream fileR = new FileInputStream(file); 74 BufferedReader reads = new BufferedReader( 75 new InputStreamReader(fileR)); 76 String st = null; 77 while ((st = reads.readLine()) != null) { 78 strsBuffer.append(st); 79 } 80 fileR.close(); 81 } else { 82 Toast.makeText(this, "该目录下文件不存在", Toast.LENGTH_LONG).show(); 83 } 84 } 85 } catch (Exception e) { 86 e.printStackTrace(); 87 } 88 Toast.makeText(this, "读取到的数据是:" + strsBuffer.toString() + "", 89 Toast.LENGTH_LONG).show(); 90 } 91 }
Android数据存储之SD卡相关推荐
- 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/327.html 很多童鞋说 ...
- android 数据持久化——读写SD卡中的内容
在前面讲的那三个方法:openFileOutput .openFileInput 虽然都能通过流对象OutputStream和InputStream可以处理任意文件中的数据,但与SharedPrefe ...
- android 自动下一首,Android播播放完SD卡指定文件夹音乐之后,自动播放下一首
最近做一个项目,需要连续播放音乐,播放完一首歌之后,自动播放完下一首歌.不要重复播放. 代码如下: package com.example.asyncplayer_ex; import java.io ...
- File存对象--android 的File存储到SD卡();
方法1:android File存对象--File存储到SD卡(); 1.保存对象到本地或SD卡 需要注意的是,要保存的对象(OAuthV1)一定要实现了Serializable接口. 实现了Seri ...
- android的SP存储和SD卡存储
在android中有着很多的存储方式,例如数据库存储,SD卡存储以及SharedPreferences(以下简称SP)等,下面我们来主要的讲解一下SP以及SD卡存储. 首先是SP,SP存储是一个采用K ...
- android 访问存储卡,Android:无法访问存储在SD卡中的文件
我正在研究一个读取存储在SD卡(内部/数据/本地)中的.txt文件的应用程序.我遇到的问题是,它似乎可以访问文件路径,但它不能访问文件本身(尽管它具有读取和写入权限),但会引发FileNotFound ...
- android qq存储方式,android(5)(模拟QQ登录,文件存储,SD卡存储,SharedPreferences存储)...
模拟QQ登录(记录账号和密码): 1.文件存储到文件中: /** * 文件存储 *@author Administrator * */ public class Utils { /** * 保存用户信 ...
- android 读取手机存储数据恢复,如何从Android手机上的SD卡恢复已删除的文件-万兴恢复专家...
第4部分:解决Android手机SD卡问题的提示 使用这些用于Android手机的SD卡恢复软件后,您当然可以检索丢失或删除的内容.然而,有时用户在Android设备上使用SD卡时会遇到不必要的问题和 ...
- android存储到sd卡中,android保存文件到SD卡【文件存储】
sd卡用于保存大文件如视频,音频,大文档等 package cn.itcast.files; import cn.itcast.service.FileService; import android. ...
最新文章
- 英特尔CFO:裁员为加速转型 是艰难但正确的决定
- 代码大全阅读笔记02
- Matlab画图中的小技巧
- Elasticsearch的功能,Elasticsearch的适用场景,Elasticsearch的特点(来自学习资料)
- java types.varchar_java statement.registerOutParameter(5, java.sql.Types.VARCHAR)返回值长度限制...
- 嵌入式linux屏幕录制,在MAC系统上进行屏幕录制
- 80字符带空格 段错误_简单错误记录
- SqlServer修改密码后登陆不上
- 【工具】ColorPix!分享一个超好用的桌面取色工具
- 手机计算机音乐软件,“自从拥有了这三款软件,我把电脑、手机上的音乐播放器全部卸载了”...
- 有监督学习(supervised learning))与无监督学习(unsupervised learning)之间有何区别?
- Parallel Scavenge收集器
- Python爬虫进阶之字体反扒保姆级教程!
- 【C】例9.7有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)
- 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放
- GEP-vcc虚拟卡介绍以及虚拟卡特点
- Verilog基础知识(异步FIFO)
- 未分配利润与利润表不一致_为什么本年利润与利润表不一致
- Python实现局域网IP端口扫描
- UEditor 百度编辑器 工具栏 新增自定义按钮及功能
热门文章
- 红帽RHEL6.8离线环境下升级到RHEL7.3
- bootstrap-table页码ALL显示为NAN
- centos下kong源码安装
- Async_Await;
- Hbase 常见错误总结——摘自忘了
- 自动根据动态的intput计算值
- Enterprise Library: Data Access Application Block配置文件分析篇
- stm32qspi内存映射_stm32 QSPI内存映射模式
- xcode新版本single view_动态数组函数系列1|概况-跟以往Excel版本完全不一样玩法的函数...
- python元组修改_python基础知识之元组