黑马程序员_IO流1

来源:互联网 发布:怎么注销阿里云邮箱 编辑:程序博客网 时间:2024/05/22 13:14

  ------- android培训java培训、期待与您交流! ----------

一    IO流

1 概述:IO用来操作数据的流
(1)流按操作数据分为:字节流和字符流
(2)流按流向分为:输入流和输出流
(3)字符流有两个抽象基类:Reader(读取流)、Writer(写入流)
(4)字节流有两个抽象基类:InputStream(读取输入流)、OutputStream(写入输出流)


二    字符流

1 FileWriter类,操作文件的字符写入流
(1)构造函数:
FileWriter fw=new FileWriter("文件地址");该构造函数会抛出异常。如果该文件不存在,则会创建该文件,如果该文件存在,则会覆盖以有文件
FileWriter fw=new FileWriter("文件地址",boolean append);该构造函数可以选择文件模式,如果为true是续写文件不会覆盖文件。

(2)方法摘要:
write(String str); 写字符串
flush(); 刷新流到目的地中
close(); 关闭前先刷新

(3)例子:

import java.io.*;class  IoDemo{public static void main(String[] args) throws IOException//主函数抛异常{//创建文件写入流,并指定目的地FileWriter fw=new FileWriter("FileDemo.txt");fw.write("abc");//写入字符串进流中fw.flush();//刷新流中数据fw.close();//关闭资源}}

2 FileReader类,操作文件的字符读取流
(1)构造函数:
FileReader fr=new FileReader("文件地址");此构造方法会抛出异常。如果文件不存在就抛出异常,文件寻找则不会。

(2)方法摘要:
read(); 读一个字节,如果读到文件的末尾就返回-1
read(char[] buf) ;读一个数组,会返回读到的个数,如果返回-1,说明没有数据了。

(3)例子:

import java.io.*;class  IoDemo{public static void main(String[] args) throws IOException//主函数抛异常{//创建文件读取流,并与文件相关联FileReader fr=new FileReader("FileDemo.txt");//两种读取方式//方式一read1(fr);//方式二read2(fr);}public static void read1(FileReader fr)throws IOException//方式一,一个一个读{int len=0;while((len=fr.read())!=-1){System.out.println((char)len);}}public static void read2(FileReader fr)throws IOException//方式二,一个数组一个数组读{int len=0;char[] ch=new char[1024];//定义一个字符数组while((len=fr.read(ch))!=-1){System.out.println(new String(ch,0,len));}}}

3 字符流的缓冲区BufferedWriter、BufferedReader

(1)缓冲区的出现是为了提高流的效率而存在的,所以定义缓冲区时必须要先有流存在

(2)BufferedWriter,字符写入流的缓冲区
构造方法:BufferedWriter bufw=new BufferedWriter(Writer w);
方法摘要:newLine();换行

(3)BufferedReader,字符读取流的缓冲区
构造方法:BufferedReader bufr=new BufferedReader(Reader r);
方法摘要:readLine();读取一行

(4)流的异常处理和加入缓冲技术示例:(复制文件)

import java.io.*;class  BufferedDemo{public static void main(String[] args) {//缓冲流初始化为nullBufferedReader bufr=null;BufferedWriter bufw=null;try{//创建文件读取流与文件相关联并加入缓冲技术bufr=new BufferedReader(new FileReader("Demo.java"));//创建文件写入流指定写入目的地,并加入缓冲技术bufw=new BufferedWriter(new FileWriter("Demo.txt"));String line=null;//读一行while ((line=bufr.readLine())!=null){bufw.write(line);//写一行bufw.flush();//刷新bufw.newLine();//换行}}catch (IOException e){throw new RuntimeException("读写失败");}finally{try{if(bufr!=null)bufr.close();//关闭资源是一定要执行的,多写在finally中}catch (IOException e){throw new RuntimeException("读取流关闭失败");}try{if(bufw!=null)bufw.close();}catch (IOException e){throw new RuntimeException("写入流关闭失败");}}}}



二    字节流
1 用于操作字节数据的流InputStream、OutputStream
2 其子类字节流FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream跟字符流类似
3 通过一个例子复制图片将这些流都用上
例子:

import java.io.*;class  BufferedDemo{public static void main(String[] args) {//缓冲流初始化为nullBufferedInputStream bufi=null;BufferedOutputStream bufo=null;try{//创建文件读取流与文件相关联并加入缓冲技术bufi=new BufferedInputStream(new FileInputStream("aaa.mp3"));//创建文件写入流指定写入目的地,并加入缓冲技术bufo=new BufferedOutputStream(new FileOutputStream("bbb.mp3"));int by=0;//读取while ((by=bufi.read())!=-1){bufo.write(by);//写入}}catch (IOException e){throw new RuntimeException("读写失败");}finally{try{if(bufi!=null)bufi.close();//关闭资源是一定要执行的,多写在finally中}catch (IOException e){throw new RuntimeException("读取流关闭失败");}try{if(bufo!=null)bufo.close();}catch (IOException e){throw new RuntimeException("写入流关闭失败");}}}}

2 转换流
(1)InputStreamReader,字节通向字符的桥梁
(2)OutPutStreamWriter,字符通向字节的桥梁

3 键盘录入
(1)InputStream is=System.in;标准输入流,键盘
(2)OutputStream os=System.out;标准输出流,控制台
(3)键盘录入加入缓冲技术,可以读取一行比较高效。但是readLine()方法是字符流BufferedReader()的方法。所以需要转换流InputStreamReader将字节流转换成字符流。
例如:BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
(4)输入输出流示例,获取键盘录入并打印在控制台上

import java.io.*;class InOutDemo{public static void main(String[] args) throws IOException{//获取键盘录入并加入缓冲技术,需要转换流BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//获取输出流并加入缓冲技术,需要转换流BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));//读取键盘录入String line=null;while ((line=bufr.readLine())!=null){if("over".equals(line))//判断结束标记break;bufw.write(line);//输出读到的字符bufw.newLine();//换行bufw.flush();//刷新}}}

4 流操作规律
(1)明确源
字节:InputStream
字符:Reader
文件:FileReader、FileInputStream
缓冲技术:BufferedReader、BufferedInputStream
键盘:System.in
转换流:InputStreamReader

(2)明确目的
字节:OutputStream
字符:Writer
文件:FileWriter、FileOutputStream
缓冲技术:BufferedWriter、BufferedOutputStream
控制台:System.out
转换流:OutputStreamWriter

(3)通过以上规律从而确定应该用哪个流。

例如:复制图片

源:Reader、InputStream

图片是字节:InputStream

图片是文件:FileInputStream

需要高效:BufferedInputStream


目的:Writer、OutputStream

图片是字节:OutputStream

图片是文件:FileOutputStream

需要高效:BufferedOutputStream

所以可以确定代码为:

源:BufferedInputStream bufi=new BufferedInputStream(new FileInputStream("文件名"));

目的:BufferedOutputStream bufo=new BufferedOutputStream(new FileOutputStream("文件名"));


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我生二胎怕疼怎么办 孩子的执行力差怎么办 怀孕三个月不想要孩子怎么办 生完孩子老是掉头发怎么办 5岁半宝宝有狐臭怎么办? 4岁宝宝脾气倔怎么办 小孩子摔到后脑勺吐了怎么办 学生报告册丢了怎么办 错过宝宝语言敏感期怎么办 父亲骂我很难听怎么办 90后父母催婚怎么办 和隔壁邻居吵架了怎么办 教师上课期间孩子出问题责任怎么办 孩子一考试妈妈就焦虑怎么办 妈妈爱发脾气孩子也发脾气怎么办 孩子对家人有抵触情绪怎么办 孩子因为没耐心哭闹怎么办 宝宝哭闹真是没耐心怎么办 对自己孩子没耐心怎么办 跳了把腰伤了怎么办 爸爸对妈妈家暴怎么办 逆反心强23岁怎么办 觉得自己心理有问题怎么办 小孩心理脆弱过于敏感怎么办? 父母老是骂打我怎么办 爸妈打架闹离婚怎么办 夫妻离婚后孩子户口怎么办 离婚后孩子户口怎么办落户 50岁父母要离婚怎么办 父母离婚小孩没有出生证该怎么办 离婚。父母一直在劝说该怎么办 老婆跟人跑了怎么办啊 父母50了要离婚怎么办 父母吵架了我该怎么办 父母看孩子总是吵架怎么办 20岁父母离婚我怎么办 碰到没素质的人怎么办 父母抛弃了我该怎么办 父母说家里没钱困难怎么办 遇到素质低的老婆怎么办 孩子考试心里素质差怎么办