输入输出流的总结

1、流模型

流就是对输入输出的一个封装,用于屏蔽具体物理目标的差异性
在Java程序中,对于数据的输入输出操作以流Stream方式进行,JavaSE提供各种各样的类用于使用相同的方法获取不同类型的数据
java.io包通过数据流、序列化和文件系统为用户提供一种完成I/O操作的输入/输出流
流的分类
	操作方式
		BIO同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成
		NIO即同步非阻塞,一个线程不断的轮询每个输入输出的状态改变,如果有状态发生了改变,则进行下一步的操作
		AIO即异步非阻塞I/O模型,无需一个线程去轮询所有IO操作的状态改变,在相应的状态改变后,系统会通知对应的线程来处理
	流向
		输入流
		输出流
	传输单位
		字节流从InputStream/OutputStream派生出来,以字节为基本处理单位,一般用于操作二进制数据,字节次序是有意义的
		字符流从Reader/Writer派生出来的,以16位的Unicode码表示字符为基本处理单位,一般用于操作字符数据
		桥接流可以实现两个流之间的转换
	功能
		节点流对特定的地方读写,例如针对特定文件的读写
		过滤流用于给节点增加功能,过滤流使用结点流进行输入/输出并添加附加功能,例如打印流主要用于添加println和print两个方法
			针对对象进行功能扩展最直接的方式是继承,最大的缺陷是耦合
			具体实现采用的是装饰模式
				用途:允许向一个现有的对象添加新的功能,同时又不改变其结构
				优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能
				缺点:多层装饰比较复杂
				具体实现
	I/O流是一类很宝贵的资源,使用完后必须调用close()方法关闭流并释放资源。在关闭流时只用关闭最外层的流

2、文件系统File

java.io.File是针对操作系统中的文件系统的封装,可以用于以平台无关的方式表示文件或者文件夹
构造器
	File(String pathName)以path为路径创建File对象,可以使用相关路径或者绝对路径两种方式。如果pathname是相对路劲,则默认的当前路径在系统属性user.dir中存储
		相对路径和绝对路径
			在windows下以盘符开头的路径,在其它系统中以/开头的路径就是绝对路径,针对一个文件或者文件夹写法唯一
			相对于当前默认位置的写法,这个写法针对一个文件或者文件夹不唯一,具体写法取决于当前位置
		new File("c:/abc.txt");这里的分割符可以使用\\或者/
		new File("abc.txt")相对当前位置的路径,用于指代项目根目录
	File(String parent,String child) 这里文件对象的路径为相对于parent路径的child路径
		new File("c:/abc","bbb.txt")表示c:/abc目录下的bbb.txt文件
		new File(file对象,"abc.txt")
常见方法
	ff.getAbsolutePath():String 用于获取文件对象的绝对路径
	ff.exists():booean 是否存在对应的文件对象,返回true则表示存在
	ff.length():long 获取指定文件对象的字节数,单位为字节
	判断文件还是文件夹
		ff.isDirectory())boolean 用于判断当前文件对象是否为文件夹
		ff.isFile():boolean 用于判断当前文件对象是否为文件
	ff.delete():boolean 删除文件或者文件夹,注意Java并不能保证删除一定成功
	ff.mkdirs() 创建多级文件夹,而使用mkdir只能创建一层文件夹
	实际编程中很少使用的方法
		listFiles():File[]//获取当前文件夹的所有子文件或者子文件夹的信息,子文件或者子文件夹为File对象 
		FilenameFilter接口用于在获取子文件夹或者子文件时对名称进行过滤,属于函数式接口,可以使用lambda表达式以简化内部类的写法
			写法1:采用内部类的方式进行定义f.listFiles(new MyFilter())
			写法2:使用匿名内部类的方式进行定义f.listFiles(new FilenameFilter() {
   })
			写法3:使用lambda表达式的方式进行定义--语句糖,File[] fs = f.listFiles(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值