IO流知识点浅析
来源:互联网 发布:淘宝账号怎么注销? 编辑:程序博客网 时间:2024/05/16 11:10
IO流
什么是流?
流就是一组有序的,有起点和终点的字节集合,是对数据传输的总称。客观一点就是数据在两设备间的传输称为流,流的本质就是数据传输,根据数据传输特性将流抽象为各种类,方便更直观进行数据操作。
IO流的分类:
1、按字节分:
- 字节流 - InPutStream/OutPutStream
- 字符流 - Reader/Writer
2、按方向分:
- 输入流 - InPutStream/Reader
- 输出了 - OutPutStream/Writer
3、按功能分:
- 包装流(转换流) - InPuterStreamReader/OutPutStreamWriter
- 节点流(除包装流外都是节点流)- FileOutPutStream
更详细分类如下图:
字节流
先来看字节流的例子(InPutStream/OutPutStream):
public class IODemo1 {public static void main(String[] args) { FileOutputStream fos=null; // OutputStream输出流 try { fos=new FileOutputStream("ab.txt");//在名叫"ab.txt"的文件中写内容 fos.write("Hello World".getBytes());//将内容写到缓冲区 fos.flush(); //保存到硬盘 } catch (Exception e) { e.printStackTrace(); }finally { CloseUtils.close(fos);//调用自己写的CloseUtils方法,实现流的关闭 } }}
将内容”Hello World”写到”ab.txt”文件中。
public class IODemo2 {public static void main(String[] args) { FileInputStream fis=null; StringBuilder sb=new StringBuilder(); try { fis=new FileInputStream("ab.txt");//读"ab.txt"文件 byte[] buf=new byte[512]; int len=-1; while((len=fis.read(buf))!=-1){ //读文件,到-1后结束 sb.append(new String(buf, 0, len)); } } catch (Exception e) { e.printStackTrace(); }finally { CloseUtils.close(fis);//关闭流 } System.out.println(sb); }}
运行结果:
Hello World
字节流综合运用(实现文件的复制功能)
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import com.sxt.io.CloseUtils; public class IODemo4 { public static void main(String[] args) { copy("D:"\\java.mp4","j.mp4");定义一个copy()方法,将D盘的java.mp4文件复制到我当前工程下 } private static void copy(String from, String to) { BufferedInputStream bis=null; BufferedOutputStream bos=null; try { File file = new File(from); bis=new BufferedInputStream(new FileInputStream(file)); //输入流 bos=new BufferedOutputStream(new FileOutputStream(to)); //输出流 long total = file.length(); long part=0;// 用来记录复制了多少 byte[] buf=new byte[512]; int len=-1; while((len=bis.read(buf))!=-1){ bos.write(buf,0,len); part+=len; System.out.println("当前进度:"+(part*100/total)+"%");//打印复制文件的进度百分比 } }catch (Exception e) { e.printStackTrace(); }finally { CloseUtils.close(bis);//调用自己创建的工具类,实现关闭流的功能 CloseUtils.close(bos); } } }
上面的代码,实现了将我D盘下的一个视频文件复制到eclipes的当前工程中,这里用到了BufferedInputStream和BufferedOutStream这两个子类,它们的父类分别是InPutStream和OutPutStream。
InputStream类常用方法:
- int read( )
- int read(byte[] b)
- int read(byte[] b,int off,int len)
- void close( )
子类FileInputStream常用的构造方法:
- FileInputStream(File file)
- FileInputStream(String name)
OutputStream类常用方法:
- void write(int c)
- void write(byte[] buf)
- void write(byte[] b,int off,int len)
- void close( )
子类FileOutputStream常用的构造方法:
- FileOutputStream (File file)
- FileOutputStream(String name)
- FileOutputStream(String name,boolean append)
字符流
同样我们先来看两个例子:
public class IODemo15 {public static void main(String[] args) { BufferedWriter bw=null; try { bw=new BufferedWriter(new FileWriter("a.txt"); bw.write("hello world"); bw.newLine();// 换行。 bw.flush(); } catch (Exception e) { // TODO: handle exception }finally { CloseUtils.close(bw); } }}
上面这个代码的功能是在”a.txt”文件下写入”hello world”内容,我们发现字符流的格式几乎和字节流一模一样
。先构造BufferedWriter对象和FileWrite对象,然后调用write()方法写数据。流对象清空flush(), 流对象关闭close()。
public static void main(String[] args) { BufferedReader br=null; try { //给FileReader增加了缓存功能 br=new BufferedReader(new FileReader("abc2.txt")); String line=null; while((line=br.readLine())!=null){ System.out.println(line); } } catch (Exception e) { // TODO: handle exception }finally { CloseUtils.close(br); } } }
输出结果
hello world
上面这个代码是为了读取BufferedWriter刚写入的数据。格式也仍然和字节流相类似,构造BufferedReader对象和FileReader对象,然后调用readLine()方法读取数据。
Write类常用方法:
- write(String str)
- write(String str,int off,int len)
- void close();
- void flush();
子类BufferedWriter常用的构造方法
- BufferedReader(Writer out)
Reader()常用方法:
- int read()
- int read(byte[] c)
- read(char[]c,int off,int len)
- void close();
子类BufferedReader特有的方法:
- readLine()
- IO流知识点浅析
- Java IO流知识点
- IO流知识点整理
- IO流知识点汇总
- IO流知识点
- IO流知识点总结
- IO流的知识点
- IO流知识点总结
- IO流知识点整理
- 浅析java的io流
- IO流知识点总结01
- IO流知识点总结02
- Java IO流知识点总结
- IO流的一些知识点
- IO流的基本知识点
- IO流简单学习知识点
- IO流字符流知识点整理
- Java中IO流知识点总结
- CSS background:url 路径问题
- setInterval() 和 setTimeout() 的区别
- 动态网页
- 单链表基本操作示例1[C语言实现]
- 守护进程
- IO流知识点浅析
- mysql数据库的概述
- powershell:获取cpu逻辑核心数
- 一、Django安装&配置
- 前端测试方法
- Dining POJ
- JAVA枚举类状态机 与 Java枚举策略模式
- [python基础教程第二部]第二章
- 算法设计与应用基础系列18