版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 Android中的数据存取主要内容数据存储数据存储实例7.1 文件存储 android是基于java语言的,在java中提供了一套完整的输入输出流操作体系,与文件相关的有FileInputStream,FileOutputStream等,通过这些类可以非常方便地访问磁盘上的文件内容。同样的android也支持这种方式来访问手机上的文件。Android手机中的文件有两个存储位置:内置存储空间和外部SD卡,针对不同位置的文件的存储的有所不同,下面分别对它们的操作。7.1.1 手机内置存储空间文件的存取DiagramContext提供了如下两个方法来打开本应用程序的数据文件夹里的文件IO流。
2、FileInputStream openFileInput(String name):打开应用程序的数据文件夹下的name文件对应输入流。FileOutputStream openFileOutput(String name, int mode):打开应用程序的数据文件夹下的name文件对应输出流。 第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。 第二参数用于指定操作模式,有四种模式。Context.MODE_PRIVATE=0:默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入
3、的内容追加到原文件中,可以使用Context.MODE_APPEND 。Context.MODE_APPEND=32768:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件; Context.MODE_WORLD_READABLE =1:表示当前文件可以被其他应用读取;Context.MODE_WORLD_WRITEABLE =2:表示当前文件可以被其他应用写入。7.1.1 手机内置存储空间文件的存取如果希望文件被其他应用读和写,可以传入: Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE 应用程序的数据文件默认
4、保存在/data/data/files目录下,文件的后缀名随意。7.1.1 手机内置存储空间文件的存取在手机内置存储空间中创建文件、写入内容的一般步骤:(1)调用openFileOutput()方法,传入文件的名称和操作的模式,该方法将会返回一个文件输出流;(2)调用write()方法,向这个文件输出流中写入内容;(3)调用close()方法,关闭文件输出流。读取手机内置存储空间中文件的一般步骤:(1)调用openFileInput()方法,传入需要读取数据的文件名,该方法将会返回一个文件输入流对象;(2)调用read()方法读取文件的内容;(3)调用close()方法,关闭文件输入流。7.1
5、.1 手机内置存储空间文件的存取 1、当我们手机上不存在该文件时,我们先写后读与先读后写有区别吗?程序会不会出错?(具体做法:把手机上的content.txt文件删除,然后分别进行先写后读与先读后写操作,观察效果)。 2、不同操作模式的区别,当我们多次执行写入操作时, 文件里的内容是被覆盖还是不断的在文件末尾附加新数据?(具体做法:修改openFileOutput()方法的第二个参数)。7.1.1 手机内置存储空间文件的存取7.1.1 案例 单击write按钮,将第一个文本编辑框(writeText)的内容写入到指定的文件中(content.txt),单击read按钮, 从指定的文件中(con
6、tent.txt)读取数据并显示在第二个文本框(readText)上。7.1.1 案例程序清单:FileTestreslayoutactivity_main.xml 设置文本输入框最少为两行设置文本输入框的提示信息7.1.1 案例 程序清单:FileTestreslayoutactivity_main.xml7.1.1 案例 在MainActivity.java中分别为写入内容和读取内容按钮添加事件处理.程序清单:FileTestsrcietjxufecnandroidMainActivity.java public class MainActivity extends Activity pr
7、ivate Button read, write;private EditText readText, writeText;private String fileName=content.txt;public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); read = (Button) findViewById(R.id.read); write = (Button) findViewById(R.id.wr
8、ite); readText = (EditText) findViewById(R.id.readText); writeText = (EditText) findViewById(R.id.writeText); read.setOnClickListener(new OnClickListener() public void onClick(View v) readText.setText(read(); );设置保存的文件名获取读取内容按钮获取写入内容按钮添加事件处理将读取的内容显示在文本编辑框上7.1.1 案例 write.setOnClickListener(new OnClic
9、kListener() public void onClick(View v) write(writeText.getText().toString(); ); public void write(String content) try FileOutputStream fos = openFileOutput(fileName, Context.MODE_APPEND); 当第二个参数为Context.MODE_PRIVATE时,后写入的内容会覆盖原有内容。PrintStream ps = new PrintStream(fos);ps.print(content); catch (Exce
10、ption e) e.printStackTrace();将文本编辑框的内容写入文件该方法将字符串内容写入文件程序清单:FileTestsrcietjxufecnandroidMainActivity.java7.1.1 案例 public String read() StringBuilder sbBuilder = new StringBuilder(); try FileInputStream is = openFileInput(fileName); byte buffer = new byte64; int hasRead; while (hasRead = is.read(buff
11、er) != -1) sbBuilder.append(new String(buffer, 0, hasRead); catch (Exception e) e.printStackTrace();return sbBuilder.toString(); 程序清单:FileTest/src/iet/jxufe/cn/android/MainActivity.java该方法用于读取文件信息,并以字符串返回获取文件输入流定义缓冲区的大小记录每次读取的字节数7.1.2 SD卡文件存取 对于手机而言,内存非常宝贵,也是比较小的。内存空间会影响到手机的运行速度,通常不建议将数据保存到手机内存中,特别是
12、一些比较大的资源如图片、音频、视频等。那么这些资源存放在哪里呢?存放在外存上,几乎所有的Android设备,都会配有外存设备,最常见的就是SD卡。可以把SD卡看作是移动硬盘或U盘。 读取SD卡上的文件和读取手机上的文件类似,都是通过文件操作流的方式读取的,Android中没有提供单独的SD卡文件操作类,直接使用Java中的文件操作即可,关键是如何确定文件的位置。因为SD卡的可移动性,因此,在访问之前,需要验证手机的SD卡的状态。 要想在模拟器中使用SD卡,首先需要创建一张SD卡(当然不是真的SD卡,只是一个镜像文件)。创建SD卡可以在Eclipse创建模拟器时随同创建,也可以使用Android
13、提供的命令在命令行进行创建。 打开命令行窗口进入android SDK安装路径的tools目录下,输入以下命令在D盘创建一张容量为2G的SD卡,文件后缀名可以随便取,建议使用.img,生成的文件为镜像文件。如果你在环境变量中添加了Android tools目录,则可直接输入相应的命令即可。mksdcard 2048M D:sdcard.img7.1.2 SD卡文件存取读、写SD卡上的文件步骤如下: 1、调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,并且应用程序具有读写SD卡的权限。 Environment.getExternalS
14、torageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。 2、调用Environment的getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录。 3、使用FileInputStream、FileOutputStream、FileReader、FileWriter读、写SD卡里的文件。7.1.2 SD卡文件存取注意: 文件读取之前,应确认手机上已插入SD卡,对于模拟器来说,可以通过mksdcard命令来创建虚拟存储卡; 为了读、写S
15、D卡上的数据,必须在应用程序的清单文件(AndroidManifest.xml)中添加读、写SD卡的权限。在SDCard中创建与删除文件权限 往SDCard写入数据权限 7.1.2 SD卡文件存取7.1.2 案例 下面仍然以上面的程序为例,只是这次将数据写入到SD卡上的文件,程序界面布局一致,在此不再列出。关键代码区别在于,在读写之前需先判断手机上是否存在SD卡,然后运用java的输入输出流技术进行读写操作,关键代码如下:public class MainActivity extends Activity private Button read, write;private EditText
16、readText, writeText;private String fileName = content.txt;public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);read = (Button) findViewById(R.id.read);write = (Button) findViewById(R.id.write);readText = (EditText) findViewById(R.i
17、d.readText);writeText = (EditText) findViewById(R.id.writeText);read.setOnClickListener(new OnClickListener() public void onClick(View v) readText.setText(read(););程序清单:SDCardFileTestsrcietjxufecnandroidMainActivity.java7.1.2 案例 write.setOnClickListener(new OnClickListener() public void onClick(View
18、 v) write(writeText.getText().toString(); ); public void write(String content) try if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED) File sdCardDir = Environment.getExternalStorageDirectory(); File destFile = new File(sdCardDir.getCanonicalPath()+ File.separator + fileName
19、); System.out.println(*+destFile.getAbsolutePath(); RandomAccessFile raf = new RandomAccessFile(destFile, rw); raf.seek(destFile.length(); raf.write(content.getBytes(); raf.close(); catch (Exception e) e.printStackTrace(); 向文件中写入内容判断手机中SD卡状态获取SD卡目录根据路径和文件名创建文件把指针定位到文件末尾在文件末尾追加新的内容关闭文件程序清单:SDCardFile
20、TestsrcietjxufecnandroidMainActivity.java public String read() StringBuilder sbBuilder = new StringBuilder();try if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)File sdCard=Environment.getExternalStorageDirectory();File destFile = new File(sdCard.getCanonicalPath()+ File.separator + fileName);FileInputStream fis=new FileInputStream(destFile);byte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年软件开发源代码托管合同协议
- GB 175-2023《通 用硅酸盐水泥》变化
- 无伤运动-预防与康复的关键策略
- 房产中介:开启市场新篇章-破局竞争拥抱变革与机遇
- 期货投资:智慧资产配置-解读市场掌控风险增值收益
- 学科兴趣分享-分享学科兴趣与成果
- 智慧房产:团队协作之道-深化项目管理提升交付效率
- 2026七年级数学上册 字母表示数
- 科研技能教程单元课01onine数据库使用教程
- UX设计培训试题及答案
- 骨干教师考试试题及答案
- 艺术品销售佣金协议范文
- 抖音工会合同协议
- 2024年二级注册结构工程师专业考试试题及答案(下午卷)
- 2023年南山中学和南山中学实验学校自主招生考试数学试题
- 智慧树知到《中医与诊断-学做自己的医生(暨南大学)》2025章节测试附答案
- 梅毒知识讲座
- 实验室意外事故应急处置和应急预案课件
- 《电力可靠性管理办法》参考试题库(含答案)
- GB/T 43683.1-2024水轮发电机组安装程序与公差导则第1部分:总则
- 混凝土构件的配筋计算
评论
0/150
提交评论