流的知识概述

        之前写了一些有关Java知识点的基础知识,这一次开始总结一些新的知识点,有关Java中的流知识点。虽然学习很累,但是让人心里踏实。我始终坚信只有学习脚踏实地、才能够走的远!不积小流无以致千里,不积跬步无以至千里!

流的定义

首先我们来了解一下什么叫做流?

        流是一个相对抽象的概念,所谓流就是一个传输数据的通道,这个通道可以传输相应类型的数据。进而完成数据的传输。这个通道被实现为一个具体的对象

        在Java程序中,对于数据的输入输出操作以流Stream方式进行,JavaSE提供各种各样的类用于使用相同的方法获取不同类型的数据,程序中通过标准的方法输入或者输出数据。

输入流:从外部空间(文件、网络连接、内存块)读入字节序列的管道(对象)。

输出流:可以向外部空间(文件、网络连接、内存块)写入字节序列的管道(对象)。

流的分类

        从Java不同版本上来说,流可以分为BIO、NIO和AIO三大类。Java 中的BIO、NIO和AIO理解为是Java语言对操作系统的各种I0模型的封装。

1.BIO即同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。

2.NIO即同步非阻塞,一个线程不断的轮询每个输入输出的状态改变,如果有状态发生了改变,则进行下一步的操作。

3.AIO即异步非阻塞I/O模型,无需一个线程去轮询所有IO操作的状态改变,在相应的状态改变后,系统会通知对应的线程来处理。

按流向分为输入流和输出流:

        可以从输入流读取数据但不能写,要从输入流读取数据,则必须有一个与这个流相关的字符源。

按传输单位分为字节流和字符流:

1.字节流从InputStream/OutputStream派生出来,以字节为基本处理单位,一般用于操作二进制数据,字节次序是有意义的

2.字符流从Reader/Writer派生出来的,以16位的Unicode码表示字符为基本处理单位,一般用于操作字符数据

按功能还可以分为节点流和过滤流:

1.节点流:负责数据源和程序之间建立连接,结点流对特定的地方读写

2.过滤流:用于给节点增加功能,过滤流使用结点流进行输入/输出并添加附加功能

字符流就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表以获取对应的文字。简单的说:字符流=字节流+编码表

        1.字符流的两个顶层父类: Reader和Writer

        2.字节流的两个顶层父类:InputStream和OutputStream

        3.输入输出靠reader和writer, inputstream和outputstream四个类和子类支持

        4.读入的内容有对象,字符,图像和声音等

注意:VO流是一类很宝贵的资源,使用完后必须调用close()方法关闭流并释放资源。在关闭流时只用关闭最外层的流。


File类

java.io.File用于封装和平台无关的文件夹和文件对象。

//获取一个文件夹的字节数(针对windows平台)
File ff=new File("file.txt");
//length():long 用于获取文件的字节数,若果不存在返回0
//一个汉字=2B
System.out.println(file.length()+"B");

常见的构造方法

1.File(String pathName)以path为路径创建File对象,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储

File ff=new File("dd.txt");//使用的是相对路径,这个路径将从项目的根目录开始算起

File ff=new File("d:/data/dd.txt");//使用的是绝对路径,从d:开始(windows系统)

string ss=system.getProperties().getProperty("user.dir");
system.out.print1n(ss); //D: \workspace\ecipse-2020\2022-01-04

2.File(String parent,String child)这里文件对象的路径为相对于parent路径的child路径,相当于parent+"/""+child

访问文件名的方法

getName():String 获取文件名称

getPath():String  获取路径,如果构建File时使用的是相对路径,则这里返回的就是相对路径;如果创建时参数为绝对路径,返回绝对路径。

getAbsolutePath():String 获取绝对路径

getParent():String 获取当前文件对象的上级File对象,如果构建文件对象时使用的是相对路径,则这里返回为null。

文件检测相关方法

canWrite():boolean 是否可写

canRead():boolean 是否可读

isFile():boolean 是否是文件,因为File对象可以封装文件和文件夹

isDirectory():boolean 是否为文件夹

isAbsolute():boolean 是否为绝对路径

isModified():long 文件的最后修改时间

常见操作

1.createNewFile():boolean 创建一个新文件【如果文件不存在则返回true,表示创建成功;如果文件已经存在则返回false,表示创建失败】

2.exists():boolean文件或者文件夹是否存在

3.length():long 获取文件大小,单位是字节,如果是文件夹则返回值没有指定

4.renameTo(File):boolean 修改文件或文件夹名称

5.delete():boolean 删除文件,也可以删除文件夹,要求文件夹为空,不能有文件和子文件夹

        deleteOnExit():void退出系统时自动删除

6.目录操作

        mkdir():boolean只能创建一层文件夹,如果创建d:/a1/a2/a3时,当父文件夹d:/a1/a2不存在时则创建失败
        mkdirs():boolean自动创建多级文件夹

7.list():String[]获取当前文件夹所有的子文件信息

        listFiles():File[]获取当前文件夹所有子文件信息,子文件为File对象

8.static listRoots():File[]列出系统所有的根路径

文件过滤器FilenameFilter

带参数的listFiles方法支持对于子文件进行过滤,只获取需要满足条件的文件对象。

        FilenameFilter接口中包含一个accept(File dir,String name)方法,该方法用于对指定File的所有子目录或者文件进行迭代,如果方法返回true则list方法会获取该目录或者文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值