IO流简单学习知识点

     流是一组有顺序的,有起点和终点的字节/字符集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

输入input 文件——》程序======输入流

输出output 文件《——程序======输出流
站在程序角度来看是输出还是输入

一、IO的分类

    按照数据单位分类:

    字节流(8bit 传输视频、图片)


    字符流(16bit  传输文本文件

    按照角色分类:

        1.节点流:直接操作文件的流

        2.处理流:将传输进行操作处理,可作用于处理流和节点流上




2.IO的体系

抽象基类 :
                              InputStream             OutputStream              Reader                Writer

      

1. Java的IO流共涉及40多个类,实际上非常规则,都是从如下4个抽象基类派生的。
2. 由这四个类派生出来的子类名称都是以其父类名作为子类名后缀
三、File 类

  • java.io.File类:文件和目录路径名的抽象表示形式,与平台无关
  • File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
  • File对象可以作为参数传递给流的构造函数

File类构造方法

     1.public File(String pathname)

      以pathname为路径创建File对象

     2.public File(String parent,String child)

      以parent为父路径,child为子路径创建File对象

     3.注意:File的静态属性String separator存储了当前系统的路径分隔符。
                  在UNIX中,此字段为‘/’,在Windows中,为‘\\’
File类常见的方法


IO流传输文件的demo

package org.jcq.main;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test {
	/**
	 * 使用IO流的节点流和处理流进行复制 1.创建File类实例,src是源文件路径,dest是目标传输文件路径(这个文件是没有的)
	 * 2.将File实例做为FileInputStream或者FileOutputStream处理流的形参,因为效率问题,非文本文件使用FileInputStream和FileOutputStream
	 * 3.创建缓冲流BufferInputStream 4.进行方法调用,并操作 5.清空缓冲留flush 6.关闭IO流
	 */
	public void testCopy(String src, String dest) {
		// 创建File实例
		File fs = new File(src);
		File fd = new File(dest);
		// 创建节点流
		FileInputStream fis= null;
		FileOutputStream fos = null;
		// 创建处理流
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		try {
			fis = new FileInputStream(fs);
			fos = new FileOutputStream(fd);
			bis = new BufferedInputStream(fis);
			bos = new BufferedOutputStream(fos);
			//调用方法,设置字节数组,设置字节数组每次装多少个字节(通过返回值查看是否全部读取完)
			byte [] b=new byte[20];
			int len;
			while((len=bis.read(b))!=-1) {
				//不等于-1则说明未读取完
				bos.write(b, 0, len);//b写入字节,0从头开始写入,len每次循环写入多少字节
			}
			bos.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				//为了防止空指针问题,先进行判空
				if(bis!=null) {bis.close();}
				if(bos!=null) {bos.close();}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}
}

四、套路说明

步骤:

1、创建File的对象,指明路径,
2、创建FileInputStream对象,即节点流

4、创建BufferInputStream对象,构造器参数为FileInputStream对象,即处理流
3、调用BufferInputStreamBufferOutputStream对象的方法

/*read() :读取一个字节,当执行到文件结尾返回-1

*read(byte [ ]):读取一段字节,然后返回该段byte的字节长度,若未读取到字节,即到文档末尾,则返回-1

如:一个字符串abcdef,byte[4]

第一次byte={a,b,c,d},第二次byte={e,f,c,d},第二次读取将第一次读取的byte[0]/byte[1]替换e/f

*/

4、关闭相应的流(无论报错与否,都要保证关闭)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜马拉雅以南

奶茶,干杯?!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值