首先让我们回顾一下
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- 要inputStream或OutputStream作为参数,实现从字节流到字符流的转换
数据流 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
分享到:
相关推荐
以下是一些关于Android文件IO的关键知识点: 1. **Java IO流的概念**: Java IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理单字节的数据,如InputStream和OutputStream是字节流...
### Android文件IO操作详解 在Android开发中,文件的输入输出(IO)操作是不可或缺的一部分,它涉及到数据的存储与读取,对于应用程序的数据持久化至关重要。本文将深入解析Android中的IO操作,涵盖基本概念、常见...
在这个“Android文件系统全面讲解”的主题中,我们将深入探讨Android文件系统的结构、操作方式以及如何在应用程序中有效地使用文件。 1. **文件系统的层次结构** Android文件系统采用Linux标准的目录结构,根目录...
《Android文件系统浏览器详解》 在移动设备领域,Android操作系统以其开放性和灵活性赢得了广大用户的喜爱。其中,Android的文件系统是其核心组成部分之一,对于开发者和高级用户来说,理解和掌握如何浏览、操作...
《Android文件管理器源码详解》 在移动设备操作系统领域,Android以其开源、灵活的特点深受开发者喜爱。在Android开发中,文件管理是一个重要的部分,它涉及到用户数据的存储、访问和操作。本篇文章将深入探讨一个...
总的来说,创建一个Android文件浏览器涉及到了Android文件系统的操作、UI设计和事件处理等多个方面,是Android开发中一个实用且有趣的实践项目。通过这个Demo,初学者不仅能学习到文件操作的基本技巧,还能提升对...
《构建类似QQ的Android文件管理应用详解》 在Android平台上,开发一款类似QQ的文件管理应用,不仅可以提供用户友好的文件浏览、组织和操作功能,还可以实现高效的文件管理和分享。本篇文章将深入探讨如何构建这样的...
本文将深入探讨如何创建一个简单的Android文件管理器,包括其基本布局设计和功能实现。 首先,文件管理器的核心是一个列表视图(ListView),用于展示文件和目录。在提供的代码段中,我们看到XML布局文件定义了一个...
**Android文件管理器源代码详解** 在Android平台上,文件管理器是用户操作手机或平板电脑上文件的重要工具。本资源提供了名为"TeamAmaze-AmazeFileManager-a29feda"的开源Android文件管理器源代码,它是一个完整且...
Android 文件操作详解 Android 的文件操作说白了就是Java的文件操作的处理。所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了。好了,话不多说,开始今天的正题吧。 先从一个小项目入门吧 ...
本文将深入解析一个自编的Android文件管理器源码,旨在帮助开发者理解和实现自己的文件管理应用。 首先,我们关注的是源码中的核心功能。一个基本的文件管理器通常包括以下部分: 1. **文件浏览与目录结构**:源码...
《Android文件管理器详解》 Android文件管理器是一款实用的应用程序,它允许用户查看、操作和管理设备上的文件系统。这款应用集成了多种功能,包括查看目录结构、重命名文件、删除文件以及打开文件,为用户提供了一...
【描述】描述中提到的"安卓Android源码——文件管理器源码.zip"是一个包含了实现Android文件管理器功能的源代码集合。这个压缩包可能包含了一系列的图片资源(1_120828192520_1.png和1_120828192520_2.png),这些...
《Android SD卡文件浏览器详解与应用》 在Android操作系统中,SD卡作为扩展存储空间,常常存储着大量的用户数据,包括照片、音乐、文档等。为了方便用户管理和访问这些文件,Android SD卡文件浏览器应运而生。本文...
《Android文件管理器详解》 Android文件管理器是一款在Eclipse开发环境中精心打造的应用程序,其主要目标是方便用户对Android设备的文件系统进行高效、便捷的管理。这款应用程序集成了多种功能,如浏览、执行、显示...
为了帮助Android开发者更好地理解和使用RxJava,网上有许多优秀的教程和资源,例如本文件中提到的GitHub托管的RxJava_Docs_For_Android_Developer项目,以及GitBook上的相关文档。通过这些资源,开发者可以系统地...
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文件管理软件进行深入解析,探讨其核心功能与实现原理。 首先,该软件提供了基本的文件操作功能,包括增、删、查、改以及设置首选项等。这些功能构成了文件管理的基础,...