A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 淡定哥 中级黑马   /  2013-5-26 14:42  /  1839 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

字符流
字符流的特点:既然IO是流用于操作数据的,那么数据的最常见形式:文件。
Writer
需求:在硬盘上创建一个文件并写入一些文字数据。
找到一个专门用于操作文字的Writer子类对象:FileWriter。
后缀名是父类名,前缀名是该流对象的功能。
//创建一个FileWriter对象,该对象已被初始化就必须明确被操作的文件。
//而且该文件会被创建到该目录下。如果该目录下已有同名文件,那么覆盖源文件。
//其实就是为了明确数据要存放的目的地。
FileWriter fw=newFileWriter("f:\\操作文件.txt");
//调用write方法,将数据写到了流中。
fw.write("asdfg");
//刷新流对象中的缓冲数据,将数据刷到目的地。                   fw.flush();
//关闭流资源,但是关闭之前会刷新一次内部流中的数据,将数据刷到目的地。
//他跟flush的区别是:flush刷新后还可以继续使用,但close刷新后会关闭流。
fw.close();
处理IO异常:
FileWriter fw=null;//定义一个指向性参数
    try {
        fw=new FileWriter("f:\\操作文件.txt");//创建新的文件对象
       fw.write("abc");//写入
    } catch(IOException e) {
       e.printStackTrace();
    }finally{
       if(fw!=null){//判断文件是否存在,因为文件可能不存在。
           try {
              fw.close();//关闭流
           } catch(IOException e) {
              e.printStackTrace();
           }
       }
    }
文件的续写:FileWriter fw=new FileWriter(“Demo.txt”,true);
Reader:第一种读取方式(常用的读取方式)
FileReader fr=null;      
    try {
       fr=newFileReader("f:\\操作文件.txt");
       intch=0;
       //read方法一次只能对一个字符,而且会自动往下读
       while((ch=fr.read())!=1){
           System.out.print((char)ch);
       }
    } catch(IOException e) {
       e.printStackTrace();
    }finally{
       try {
           fr.close();
       } catch(IOException e) {
           e.printStackTrace();
       }
    }
}
第二种读取方式:
//定义一个字符数组,用于存储读到的字符
//该read(char[])返回的是读到字符的个数
FileReader fr=null;      
try {
fr=newFileReader("f:\\操作文件.txt");
    char[]buff=new char[1024];
    int num=0;
    while((num=fr.read(buff))!=-1){
       System.out.print(new String(buff,0,num));
    }
} catch(IOException e) {
    e.printStackTrace();
}finally{
try {
           fr.close();
        } catch(IOException e) {
           e.printStackTrace();
    }
}
BufferedWriter:字符读入缓冲流
缓冲流的出现时为了提高流的操作效率 所以在操作缓冲流之前,必须要先有流对象
//创建一个流对象
FileWriter fw=newFileWriter("f:\\操作文件.txt");
//为了提高效率,加入了缓冲流对象
//只要将需要被提高效率的流对象作为参数传给缓冲流即可
BufferedWriter bw=newBufferedWriter(fw);
Bufferedreader:字符读取缓冲流。
readLine()文件的行读取,提高读取效率。读取的时候只返回回车符前边的数据,并不返回回车符,所以要加bw.newLine()换行
//创建一个读取流对象和文件相关联
FileReader fr=newFileReader("f:/操作文件.txt");
//提高效率  加入缓冲流对象的构造函数
BufferedReaderbr=new BufferedReader(fr);
//文件的行读取
String line=null;
while((line=br.readLine())!=null){
    System.out.println(line);
}


字节流
键盘录入最常见写法:BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));
流操作规律:(流对象太多,不知道用哪个)
1.   明确源和目的。
源:输入流:InputStream    Reader
目的:输出流:OutputStream  Writer
2.   操作的数据时不是纯文本
是:字符流。不是:字节流
3.   当体系明确后,在明白要使用哪个具体对象。
通过设备来区分:
源设备:内存,硬盘,键盘;
目的设备:内存,硬盘,控制台;
需求:1.将一个文本文件中的数据存储到另一个文件中。复制文件
源:因为是源,所以使用读取流。InputStream   Reader
是不是操作文本文件。是,这是可以使用Reader,这样体系就明确了。
接下来就要明确该体系中的那个对象:
明确设备:硬盘,上的一个文件。
Reader体系中可以操作文件对象的是FileReader
是否需要提高效率:是,加入Reader体系中缓冲区 BufferedReader。
BufferedReaderbr=new BufferedReader(new FileReader(”c.txt”));
目的:OutputStream    Writer
是否是纯文本。是,Writer
设备,硬盘  一个文件
Writer体系中可以操作文件对象的是Writer Reader
是否需要提高效率:是,加入Writer体系中缓冲区 BufferedWriter。
BufferedWriterbw=new  BufferedWriter(new FileWriter(“c.txt”));
需求2.将键盘输入的数据保存到一个文件中。
源:InputStream    Reader
是不是纯文本?是,Reader
设备:键盘,对应的是System.in。为了操作键盘文本数据方便,转成字符流按照字符串操作是最方便的。
所以既然明确了Reader,那么就将System.in 转换成Reader。
用了Reader体系中的转换流,InputStreamReader;      
InputStreamReader isr = new InputStreamReader(System.in);
需要提高效率吗?需要
BufferedReaderbr=new BufferReader(new  InputStreamReader(System.in));
目的:OutputStream  Writer
是否是纯文本?是,Writer
设备:键盘。一个文件。使用FileWriter
FileWriter  fw =  new  FileWriter(c.txt);
需要提高效率吗?需要
BufferedWriter  bw=new BufferedWriter(new FileWriter(c.txt) );
扩展:将键盘输入的数据按照指定的编码表,保存到一个文件中、
目的:OutputStream  Writer
是否是纯文本?是,Writer
设备:键盘。一个文件。使用FileWriter,但FileWriter使用的是默认编码表GBK
但是存储时,需要假如指定编码表utf-8,而指定编码表只有转换流才可以之定,所以要使用OutputStreamWriter,而转换流对象需要接收一个字节输出流,而且还可以操作文件的字节输出流:FileOutputStream;
OutputStreamWriterosw=
newOutputStreamWriter(new FileOutputStream(“c.txt”,”utf-8”))
需要提高效率吗?需要        BufferedWriter  bw=new BufferedWriter(osw );
转换流什么时候使用:字符和字节之间的桥梁,通常涉及到字符编码转换时用转换流

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

3 个回复

倒序浏览
技术还不到位  得努力了
回复 使用道具 举报
总结的有点乱了点,最好排版一下!
回复 使用道具 举报
                                                                    .
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马