一.分类
- 字节流(不适用于文本)
- InputStream
- OutputStream
- 字符流
- Reader
- Writer
二.字节流
1.概述
InputStream
字节输入流,是被读的,抽象类,不能创建对象
FileInputStream:针对文件数据操作
DataInputSream:转换流,可传基本数据类型
BufferedInputStream:缓冲流,常用
ObjectInputStream:对象流
OutputStream
字节输出流,是被写的,抽象类,不能创建对象
PrintStream:单向的输出流
2.字节流----文件流
文件流FileInputStream,字节流不适合文本(原因是10个字节为单位读),但适合图片
//1.创建对象 FileInputStream fis = new FileInputStream("src/test.txt"); //2.读文件,一个字节一个字节读 int n=fis.read(); System.out.println((byte)n); n = fis.read(); System.out.println((byte)n); n = fis.read(); System.out.println((byte)n); //3.读文件,一次读取多个字节 byte []by=new byte[1024]; int m=fis.read(by);//将读取的字节内容保存在buf数组 返回的是读取的字节数 System.out.println(m); //4.是流,所以再次读取时读不到数据,返回-1 m=fis.read(by); System.out.println(m); //5.完整读取一个文本 byte []buf=new byte[10];//10个字节为单位读取。 int len=-1; while((len=fis.read(buf))!=-1){ String result =new String(buf,0,len); System.out.print(result); } fis.close();
文件流的小练习:把图片复制到桌面
//1.找到源和目标位置 FileInputStream fis=new FileInputStream("图片原目录"); FileOutputStream fos=new FileOutputStream("桌面目录"); //2.读取文件媒介 byte []buf=new byte[1024]; int len=-1; //3.读取并写入文件 while((len=fis.read(buf)) != -1) { fos.write(buf, 0, len); } //4.写入后重要的步骤 fos.flush(); fos.close(); fis.close();
文件流的小练习2:写入东西到txt文件
//文件字节输出流,创建对象并写入txt文档 //1.创建对象,追加或者覆盖 FileOutputStream fos=new FileOutStream("src/test.txt",true); FileOutputStream fos=new FileOutStream("src/test.txt"); //2.写入 fos.write(97);//写入a fos.write("你好".getByte());//将字符串转化为字节数组 //3.收尾 fos.flush(); fos.close();
3.字节流-----缓冲流
具有缓冲区,减少对硬盘的读写次数,在这里首先接触到装饰者模式,以后还会遇到更多
- 写入缓冲字节流
//1.创建缓冲输出流 装饰者模式 设计模式 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src/buffer.txt")); bos.write("你好,我这里使用了缓冲流进行写入内容!!".getBytes()); bos.flush(); bos.close();
- 读取缓冲字节流
//2.创建缓冲输入流 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src/buffer.txt")); byte[] buf = new byte[1024]; int len = -1; while((len=bis.read(buf)) != -1 ) { System.out.print(new String(buf, 0, len)); } bis.close();