黑马程序员_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("文件名"));
- 黑马程序员_io流1
- 黑马程序员_IO流(1)
- 黑马程序员_IO流1
- 黑马程序员_IO流1
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- C++——STL中三种顺序容器的简要区别
- SpringMVC入门实例及详细讲解(2)
- 第三题
- 第1讲 zend1.11介绍
- ImageView的selector效果
- 黑马程序员_IO流1
- RecyclerView全解(一)
- 如何弹出QQ临时对话框实现不添加好友在线交谈效果
- Android SDK Manager - SDK下载说明
- 素材分类:服装(1)
- 背包问题
- TCP/IP简介
- CF 11B Jumping Jack
- 实验四 用窗函数法设计FIR滤波器