您的位置:首页 > 编程语言 > Java开发

java学习-----IO

2015-11-11 20:43 435 查看
一、IO流对象的继承关系



掌握:

掌握File类的使用

掌握IO原理

掌握文件流、缓冲流、 转换流

掌握数据流、打印流、对象流

掌握随机存取文件流、ZIP文件流

二、IO流:用于处理设备上的数据

设备:硬盘,内存,键盘输入

IO流有具体的分类:

1、根据处理的数据类型不同:字节流和字符流

2、根据流向不同:输入流和输出流

字节流:因为文件编码的不同,而有了对字符进行高效操作的字符流对象。
原理:其实就是基于字节流读取字节时,去查了指定的码表


字节流和字符流的区别:

1、字节流读取的时候,读到一个字节就返回一个字节

字符流使用了字节流读到一个或者多个字节时,先去查指定的码表,将查到的字符返回。

2、字节流可以处理所有类型数据,如图片,mp3,avi.

而字符流只能处理字符数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流,除此之外都用字节流。

三、IO体系,所具备的基本功能就是读和写

1、字节流

InputStream (读),OutputStream(写)

2、字符流

Reader(读) Writer(写)

基本的读写操作方式:

因为数据通常都以文件形式存在。
所以就要找到IO体系中可以用于操作文件的流对象
通常名称可以更容易获取对象。
因为IO体系中的子类名后缀绝大部分是父类名,而前缀都是体现子类功能的名字。


所有字符输入流类都是抽象类Reader的子类

Reader的主要方法有:

int read() 从源中读取一个字符的数据,返回字符值

int read(char b[]) 从源中试图读取b.length个字符到b中,返回实际读取的字符数目

void close() 关闭输入流

Reader读取文件的步骤:

创建字符输入流对象,负责读取文件
创建中转站数组,存放读取的内容
读取文件内容到数组
输出保存在数组中的文件内容
关闭输入流


2.Writer :表示字符输出流的所有类的超类

所有字符输出流类都是抽象类Writer的子类、最常用的子类是FileWriter类

Writer的常用方法有:

void write(int n) 向输出流写入单个字符
void write(char b[]) 向输出流写入一个字符数组
void write(String str) 向输出流写入一个字符数组
void close() 关闭输出流


FileReader (专门用于处理文件的字符读取流对象)

FileWriter(专门用于处理文件的字符写入的流对象):

该类没有特有的方法,只有自己的构造函数,特点在于:用于处理文本文件;该类有默认的编码表;该类中有临时缓冲。

例子:

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/** 用FileReader和FileWriter实现字符文本文件复制的功能 */
public class TextCopyTest {

public static void main(String[] args) {
FileReader fr = null;
FileWriter fw = null;
int c = 0;
try {
//step1:创建IO流对象
fr = new FileReader("d:\\IOTest\\source.txt");
fw = new FileWriter("d:\\IOTest\\dest2.txt");
int length = 0;
char[] cbuf = new char[8192];  //
while((c = fr.read(cbuf))!= -1){  //一次性读取指定字符数组长度的数据
fw.write(cbuf, 0, length);  //一次性写入指定字符数组指定位置的数据}
while ((c = fr.read()) != -1) {//从源文件中读取字符
fw.write(c);  //往目标文件中写入字符          }
fw.flush();  //刷新输出流
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭所有的IO流对象
try {
if (null != fw) {
fw.close();             }
} catch (IOException e) {
e.printStackTrace();            }
try {
if (null != fr) {
fr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}}


四、缓冲流

1、BufferedInputStream和 BufferedOutputStream:针对字节流

2、BufferedReader 和BufferedWriter:针对字符流
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: