`
androidtoast
  • 浏览: 211718 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
38befa0e-3f74-3314-92d9-475c7fc3c19b
Android学习——入门...
浏览量:125245
社区版块
存档分类
最新评论

五,Android文件IO详解

阅读更多

 首先让我们回顾一下

JavaIO。看图:



 

看到这么多流,是不是头都大了,当年我学这块的时候,心想什么玩意,这流那流的。什么时候该用什么流?输入流和输出流经常弄混,不知道什么时候该用输出?什么时候该用输入?接下来看图 :

上面这张图说明了最基本的输入,输出。当然我们的数据源方向不一定只有文件,或许是内存或者网络。接下来说一下什么是字节流,字符流。



 

 

 

 

 

 

说白了节点流就是连接程序与数据源的一个管子,单纯的用来传送数据,并不对数据进行额外处理。而处理流是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据的读写,如BufferedReader,。说白了处理流就是在管子外面又套了一层,对水进行了过滤或者消毒。对数据进行了额外的处理,增强了额外的传输功能。处理流的构造方法总是要带一个其他的流对象做参数。

常用的节点流

  InputStream OutputStream Reader Writer

  FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流

  ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)

字符串 StringReader StringWriter 对字符串进行处理的节点流

  PipedInputStream PipedOutputStream PipedReader PipedWriter 对管道进行处理的节点流

常用处理流(关闭处理流使用关闭里面的节点流)

  InputStream OutputStream Reader Writer

缓冲流 BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter ----需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用flush方法

转换流 InputStreamReader OutputStreamWriter- inputStreamOutputStream作为参数,实现从字节流到字符流的转换

数据流 DataInputStream DataOutputStream -提供将基础数据类型写入到文件中,或者读取出来,为什么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就完了。。是不是既节约了内存空间有让程序写起来更加方便简单了呐。写倒是很简单,但是读取的时候就注意了,根据读取的数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成你正确的需求。

Android中的IO其实就是javaIO,只不过在处理细节上增加了几个好用的方法。下面看例子:

 



 


 

 

主要代码:

 


 

@Override
	public void onClick(View v) {
    	String name=mUserName.getText().toString();
    	String age=mAge.getText().toString();
    	String userInfo="用户名:"+name+";年龄:"+age+";性别:"+sexText+"\r\n";
    	int id=v.getId();
    	if(id==R.id.write_button){
    		try {
    			//1,此方法需要将字符串转换为字节写入文件
    			//MODE_APPEND:追加模式|MODE_WORLD_READABLE:全局可读|MODE_WORLD_WRITEABLE:全局可写
				//FileOutputStream fos=this.openFileOutput("androidtoast.txt", MODE_APPEND|MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
			    //fos.write(userInfo.getBytes());
   			    //fos.close();
    			
    			//2,以字符的形式直接写入文件
    			//得到Data目录      注:能操作文件夹只有两个地方:1.sdcard 2./data/data/<package_name>/
				//File dir = Environment.getDataDirectory();//得到data目录
				//File newFile=new File(dir,"/data/com.iteye.androidtoast/androidtoast.txt");
				//FileWriter fw=new FileWriter(newFile,true);
				//fw.write(userInfo);//直接将字符写入文件
				//fw.close();
				
    			//3,以缓冲流的方式写入文件,这种方式能显著减少IO的次数,在操作大文本的时经常用
    			File dir = Environment.getDataDirectory();//得到data目录
				File newFile=new File(dir,"/data/com.iteye.androidtoast/androidtoast.txt");
				FileWriter fw=new FileWriter(newFile,true);//以追加的模式将字符写入
				BufferedWriter bw=new BufferedWriter(fw);//又包裹一层缓冲流 增强IO功能
				bw.write(userInfo);
				bw.flush();//将内容一次性写入文件
				bw.close();
				Toast.makeText(this, "成功写入", 1).show();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
				Toast.makeText(this, "文件没有找到", 1).show();
			}catch (IOException e) {
				e.printStackTrace();
			}
			
    	}else if(id==R.id.read_button){
    		String content="";//读取到的内容
    		String temp = "";//存放内容
    		File dir = Environment.getDataDirectory();//得到data目录
			File newFile=new File(dir,"/data/com.iteye.androidtoast/androidtoast.txt");
			try {
				FileReader fr=new FileReader(newFile);
				BufferedReader br=new BufferedReader(fr);
				//一行一行读取 。在电子书程序上经常会用到。
				while((content=br.readLine())!=null){
					temp+=content+"\r\n";
				}
				mContent.setText(temp);
				br.close();
			} catch (FileNotFoundException e) {	
				e.printStackTrace();
				Toast.makeText(this, "文件没有找到", 1).show();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	}
	}

 

Android提供了几个操作文件输入输出的方法,这些方法封装了一些功能。如路径的构建,是否采用追加模式等等。

Context. openFileOutput("androidtoast.txt", MODE_APPEND|MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);

这个方法封装了输出流的创建,并提供了几种操作模式。首先通过这个方法打开输出流,系统会在

/data/data/<package-name>下创建一个files文件夹。你所写入的数据存放在此。如果你的程序想支持外部程序也能对你的文件进行读写,需要加入|MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE这两个操作模式。全局可读可写。注意:如果你的程序需要支持外部程序的读写,那么就只能用这种流操作方法。其他的流操作方法是不支持全局读写。

 

SD卡得读写,我示例中没写。下面说一下,首先需要得到SD当前状态 然后判断是否挂载

 

//得到外存设备的状态

String state = Environment.getExternalStorageState();

//状态为已挂载

if(state.equals(Environment.MEDIA_MOUNTED)){

//得到sd卡的目录

File dir = Environment.getExternalStorageDirectory();

File newFile = new File(dir,"androidtoast.txt");

FileOutputStream fos = new FileOutputStream(newFile,true);

fos.write(cont.getBytes());

fos.close();

}

注意 需要加入两个权限

<!-- 挂载/卸载sd卡权限 -->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<!-- 写入外设的权限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

  • 大小: 234.5 KB
  • 大小: 181.7 KB
  • 大小: 98 KB
  • 大小: 136 KB
  • 大小: 118.6 KB
  • 大小: 93.2 KB
  • 大小: 86.1 KB
  • 大小: 90.5 KB
  • 大小: 51.2 KB
  • 大小: 63.1 KB
12
0
分享到:
评论
7 楼 ihopethatwell 2012-09-04  
楼主,我如果把这个文件放在 jnires目录下,如何往/data/package/ ...目录下复制?
6 楼 keeponmoving 2012-03-31  
lz分析的不错,收藏着学习下。
5 楼 ominc 2012-03-26  
图很亮哦,谢谢主了
4 楼 tan4836128 2011-09-29  
字符串 StringReader StringWriter 对字符串进行处理的节点流

如果这两个类是节点流,那么在Writer和Reader的结构图中为什么是蓝色的处理流呢?
3 楼 lingfa0511 2011-09-23  
楼主分析的相当详细了,谢谢分享!
请问楼主上面的图形是用什么工具画的呀?
2 楼 liubang201010 2011-09-22  
比较详细了,眼下正是Android的天下,我专门买了本Android书,可以随时看.获益颇多.

<<Android应用开发揭秘>>,我相信通过这本书,如果您坚持看完跟动手敲完所有的代码,你就可以做一个产品出来了,你肯定是Android人才了,加油 Android的兄弟们.

这里有关于Android的书:http://www.goodu.info/gc/node/114
1 楼 tan4836128 2011-09-21  
程序那“大桶”居然长得像垃圾桶,:(

相关推荐

    五,Android文件IO详解.doc

    以下是一些关于Android文件IO的关键知识点: 1. **Java IO流的概念**: Java IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理单字节的数据,如InputStream和OutputStream是字节流...

    Android文件IO操作

    ### Android文件IO操作详解 在Android开发中,文件的输入输出(IO)操作是不可或缺的一部分,它涉及到数据的存储与读取,对于应用程序的数据持久化至关重要。本文将深入解析Android中的IO操作,涵盖基本概念、常见...

    Android文件系统全面讲解

    在这个“Android文件系统全面讲解”的主题中,我们将深入探讨Android文件系统的结构、操作方式以及如何在应用程序中有效地使用文件。 1. **文件系统的层次结构** Android文件系统采用Linux标准的目录结构,根目录...

    android文件系统浏览器

    《Android文件系统浏览器详解》 在移动设备领域,Android操作系统以其开放性和灵活性赢得了广大用户的喜爱。其中,Android的文件系统是其核心组成部分之一,对于开发者和高级用户来说,理解和掌握如何浏览、操作...

    Android文件管理器源码

    《Android文件管理器源码详解》 在移动设备操作系统领域,Android以其开源、灵活的特点深受开发者喜爱。在Android开发中,文件管理是一个重要的部分,它涉及到用户数据的存储、访问和操作。本篇文章将深入探讨一个...

    android 文件浏览器

    总的来说,创建一个Android文件浏览器涉及到了Android文件系统的操作、UI设计和事件处理等多个方面,是Android开发中一个实用且有趣的实践项目。通过这个Demo,初学者不仅能学习到文件操作的基本技巧,还能提升对...

    类似QQ的Android文件管理

    《构建类似QQ的Android文件管理应用详解》 在Android平台上,开发一款类似QQ的文件管理应用,不仅可以提供用户友好的文件浏览、组织和操作功能,还可以实现高效的文件管理和分享。本篇文章将深入探讨如何构建这样的...

    android文件管理器用法详解

    本文将深入探讨如何创建一个简单的Android文件管理器,包括其基本布局设计和功能实现。 首先,文件管理器的核心是一个列表视图(ListView),用于展示文件和目录。在提供的代码段中,我们看到XML布局文件定义了一个...

    Android-一个Android文件管理器源代码

    **Android文件管理器源代码详解** 在Android平台上,文件管理器是用户操作手机或平板电脑上文件的重要工具。本资源提供了名为"TeamAmaze-AmazeFileManager-a29feda"的开源Android文件管理器源代码,它是一个完整且...

    Android 文件操作详解及简单实例

    Android 文件操作详解 Android 的文件操作说白了就是Java的文件操作的处理。所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了。好了,话不多说,开始今天的正题吧。 先从一个小项目入门吧 ...

    Android 文件管理器源码

    本文将深入解析一个自编的Android文件管理器源码,旨在帮助开发者理解和实现自己的文件管理应用。 首先,我们关注的是源码中的核心功能。一个基本的文件管理器通常包括以下部分: 1. **文件浏览与目录结构**:源码...

    android文件管理器

    《Android文件管理器详解》 Android文件管理器是一款实用的应用程序,它允许用户查看、操作和管理设备上的文件系统。这款应用集成了多种功能,包括查看目录结构、重命名文件、删除文件以及打开文件,为用户提供了一...

    安卓Android源码——文件管理器源码.zip

    【描述】描述中提到的"安卓Android源码——文件管理器源码.zip"是一个包含了实现Android文件管理器功能的源代码集合。这个压缩包可能包含了一系列的图片资源(1_120828192520_1.png和1_120828192520_2.png),这些...

    android SD卡文件浏览器

    《Android SD卡文件浏览器详解与应用》 在Android操作系统中,SD卡作为扩展存储空间,常常存储着大量的用户数据,包括照片、音乐、文档等。为了方便用户管理和访问这些文件,Android SD卡文件浏览器应运而生。本文...

    Android文件管理器

    《Android文件管理器详解》 Android文件管理器是一款在Eclipse开发环境中精心打造的应用程序,其主要目标是方便用户对Android设备的文件系统进行高效、便捷的管理。这款应用程序集成了多种功能,如浏览、执行、显示...

    给 Android 开发者的 RxJava 详解

    为了帮助Android开发者更好地理解和使用RxJava,网上有许多优秀的教程和资源,例如本文件中提到的GitHub托管的RxJava_Docs_For_Android_Developer项目,以及GitBook上的相关文档。通过这些资源,开发者可以系统地...

    Android开发应用实战详解源代码

    4.10 用.iava.io.file实现文件搜索 4.11 置换imagebutton按钮 4.12 实现autocompletetextview输入提示 4.13 实现analogclock时钟 4.14 时间选择 4.15 progressbar和handler进度条 4.16 动态排版处理 4.17 ...

    Android 文件管理软件

    本文将围绕一个由个人开发者制作的Android文件管理软件进行深入解析,探讨其核心功能与实现原理。 首先,该软件提供了基本的文件操作功能,包括增、删、查、改以及设置首选项等。这些功能构成了文件管理的基础,...

Global site tag (gtag.js) - Google Analytics