---------------------- android培训、java培训、期待与您交流! ----------------------
IO流用来处理设备之间的数据传输
Java对数据的操作是用过流的方式
Java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流与字符流
流按流向分为:输入流,输出流
字符流和字节流
字节流两个基类:InputStream OutputStream
字符流两个基类:Reader Writer
字符流的特点:
既然IO流是用于操作数据的
那么数据的最常见体现形式是:文件
那么先以操作文件为主来演示
需求:在硬盘上,常见一个文件并写入一些文字数据
找到一个专门用于操作文件的Writer子类对象 FileWriter
后缀名是父类名 前缀名是该流对象的功能
import java.io;
public class IoDemo {
//
public static void main(String[] args){
// TODO Auto-generated method stub
//创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件
//而且该文件会被创建到指定的目录下,如果该目录下已有同名文件将被覆盖
//其实该步就是明确数据要存放的目的地
//FileWriter fw = new FileWriter("demo.txt");
//调用writer将字符串写入到流中
//fw.write("asdf");
//刷新流对象中的缓冲中的数据
//将数据刷到目的地中
//fw.flush();
//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据
//将数据刷新到目的地中
//和flush区别是,flush刷新后,流还可以继续使用,close刷新后,会将流关闭
// fw.write("haha");
//fw.close();
FileWriter fw = null;
try{
fw = new FileWriter("demo.tex");
fw.write("asdf");
}catch(IOException e){
System.out.println("catch:"+e.toString());
}finally{
try{
if(fw!=null)
fw.close();
}catch(IOException e){
System.out.println(e.toString());
}
}
}
}
下面是用FileReader方法来读取文件
import java.io.*;
public class ReaderDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//创建一个文件读取流对象,和指定名称的文件想关联
//要保证该文件已经存在,如果不存在,会发生异常FlieNotFoundException
FileReader fr = new FileReader("demo.txt");
//调用读取流对象的read方法
//reader()一次读一个字符,而且会自动往下读
while(true){
int ch = fr.read();
if(ch==-1)
break;
System.out.print((char)ch);
}
fr.close();
}
}
接下来是FileWriter和FileReader的子类BufferedWriter,BufferedReader字符缓冲区
字符流缓冲区
对应类:BufferedWriter BufferedReader
缓冲区要结合流才可以使用
在流的基础上对流的功能进行了增强
缓冲区的出现是为了提高流的操作效率而出现的
所以在创建缓冲区之前,必须要先有流对象
该缓冲区中提供了一个跨平台的换行符
newLine()
import java.io.*;
public class BufferrdWriter {
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
//创建一个字符写入对象
FileWriter fw = new FileWriter("buf.txt");
//为了提高字符写入流的效率,加入了缓冲技术
//只要将需要被提高的流对象作为参数传递给缓冲区的构造函数即可
BufferedWriter bufw = new BufferedWriter(fw);
for(int x=1;x<5;x++){
bufw.write("asdf");
bufw.newLine();
}
//记住只要中道缓冲区就要记得刷新
//bufw.flush();
//其实关闭缓冲区就是在关闭缓冲区中的流对象
bufw.close();
}
}
字符读取流缓冲区:
该缓冲区提供了一个一次读一行的方法,方便于对文本数据的获取
返回NULL时,表示读到文件末尾
readLine方法返回的时候只返回回车之前的数据内容,并不返回回车符
import java.io.*;
public class BufferedReaderDemo{
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
//建立一个读取流对象和文件相关联
FileReader fr = new FileReader("buf.txt");
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readLine())!=null){
System.out.println(line);
}
bufr.close();
}
}
字符流
FileReader
FileWriter
BufferedReader
BufferedWriter
字节流
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream
1
源:键盘录入
目的:控制台
2需求
源:键盘
目的:文件
3需求:想要将一个文件的数据打印在控制台上
源:文件
目的:控制台
流对象的基本规律:
通过两个明确来完成
1、明确源和目的
源:输入流
InputStream Reader
目的:输出流
OutputStream Writer
2.操作的数据是否是纯文本
是:字符流
不是:字节流
3当体系明白后,在明确要使用那个具体的对象
通过设备来进行区分
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
1,将一个文本文件中的数据存储到另一个文件中,复制文件
分析:
源:文件 因为是源,所以使用读取流:InputStream Reader
是不是操作文本文件,是!这时就可以选择Reader
这样体系就明确了
接下来明确要使用该体系中的那个对象?
明确设备:硬盘上的一个文件
Reader体系中可以操作文件的对象是FileReader
目的:OutputStream Writer
是否是纯文本 ?
是!Writer
Writer体系中可以操作文件的对象是FileWriter
FileReader fr = new FileReader(“a.txt”);
是否需要提高效率: 是!加入Reader体系中的缓冲区BufferedReader
BufferedReader bufr = new BufferedReader(fr);
FileWriter fw = nwe FileWriter("b.txt");
---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.youkuaiyun.com/heima