java boolean io流_java基础之IO流详解

工作快3年了,总是为了工作而工作,很多东西用的很熟练,但仅仅是知其然却不知其所以然,再简单体面的框架,工具,都离不开底层技术的支持,所以,带着那颗初心,重新温习一下java基础部分,今天带来的是IO流的解读。

废话不多说,先上图~

2ac62f3eb4c211a23aadf54763d640fe.png

这是java io 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Serializable接口等等一些高级用法极其原理。

虽然我们这次的主角是IO流,但是流的本质其实是对文件(File)的处理,因此,我们循序渐进一步一步从文件过渡到流去。

在java中File类是对文件和目录路径名的抽象表示,可以通过其方法改变文件的属性,但是不可以更改文件中的具体内容。下面是java中对File类操作的一些常用方法:

①、创建方法

1.boolean createNewFile() 不存在返回true 存在返回false

2.boolean mkdir() 创建目录,如果上一级目录不存在,则会创建失败

3.boolean mkdirs() 创建多级目录,如果上一级目录不存在也会自动创建

②、删除方法

1.boolean delete() 删除文件或目录,如果表示目录,则目录下必须为空才能删除

2.boolean deleteOnExit() 文件使用完成后删除

③、判断方法

1.boolean canExecute()判断文件是否可执行

2.boolean canRead()判断文件是否可读

3.boolean canWrite() 判断文件是否可写

4.boolean exists() 判断文件或目录是否存在

5.boolean isDirectory()  判断此路径是否为一个目录

6.boolean isFile()  判断是否为一个文件

7.boolean isHidden()  判断是否为隐藏文件

8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断

④、获取方法

1.String getName() 获取此路径表示的文件或目录名称

2.String getPath() 将此路径名转换为路径名字符串

3.String getAbsolutePath() 返回此抽象路径名的绝对形式

4.String getParent()//如果没有父目录返回null

5.long lastModified()//获取最后一次修改的时间

6.long length() 返回由此抽象路径名表示的文件的长度。

7.boolean renameTo(File f) 重命名由此抽象路径名表示的文件。

8.File[] liseRoots()//获取机器盘符

9.String[] list()  返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。

10.String[] list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。

对File的操作有了一定了解之后,我们来聊一聊流的分类,根据侧重点不同,有几种不同的分类方式

1. 根据流向分为输入流和输出流:

输入流和输出流是相对于程序而言的。

输出:把程序(内存)中的内容输出到磁盘、光盘等存储设备中;

4eaa9f0c2a7905062e7fc28eafbe3ea5.png

输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。

7e3b865c759cabbe8ce781114cf793ce.png

输入输出流结合起来大致是这样的:

aabd866e4c3e1daf1027dc86f9690e88.png

2.根据传输数据单位分为字节流和字符流(代码中能体现,不同的流有不同的实现类)

java中提供的字节流有OutputStream(输出流),InPutStream(输入流);字符流有Writer(输出流),Reader(输入流)。这四种也是 Java IO流中的四大基流。这四大基流都是抽象类,其他流都是继承于这四大基流的。 详情可参考本文的第一张图。

3.根据功能分为节点流和包装流(处理流)

节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.

处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

对几种流的概念有了初步认识之后,来聊一聊流的执行流程

首先, 创建源或目标对象 ;输入:把文件中的数据流向到程序中,此时文件是 源,程序是目标,输出:把程序中的数据流向到文件中,此时文件是目标,程序是源;

接下来,创建 IO 流对象,输入:创建输入流对象,输出:创建输出流对象;

第三步, 具体的 IO 操作 ;

最后,关闭资源,输入:输入流的 close() 方法,输出:输出流的 close() 方法

注意:程序中打开的文件 IO 资源不属于内存里的资源,垃圾回收机制无法回收该资源。如果不关闭该资源,那么磁盘的文件将一直被程序引用着,不能删除也不能更改。所以应该手动调用 close() 方法关闭流资源

只知道流的使用流程是远远不够的,如何才能用java提供的相关工具类来灵活的使用IO流呢?下面,我们会是一个漫长的温习之旅,对java中提供的流的相关工具类来做个详解。

1.字节输入输出流

5001e3c72304ffe7bf9211303518ebf6.png

在流的分类中,提到了OutputStream和InputStream两个字节流(接口),这次,分别说说他们对应的一种实现类(FileOutputStream和FileInputStream)。

OutputStream(字节输出流)的一些常用方法:

8f7c8b2210ee1ec91e35cfd884b5f9c6.png

java中用FileOutputStream类来描述对OutputStream接口的实现:

2c863d289568dd7b635086681675abdf.png

InputStream(字节输入流)的一些常用方法:

f40dbf2f39a61943e65b5e981454e16a.png

java中用FileInputStream类来描述对InputStream接口的实现:

6711206d87ef135a19f9ac4d6d31674c.png

最后用一个实用的小例子来巩固一下对字节流的使用(文件的复制):

b1b21587d30fb9e4024c46a4dd8e2c30.png

终于攻破了java给我提供的字节流实现类,趁热打铁,接下来在看看字符流的实现类。

2.字符输入输出流

baa6966a58cacc9f8e0b2ab9eb225377.png

字符输出流:FileWriter的一些常用方法

4afa9dcff26099d38a1ac0d493ddd6ad.png

java中用 FileWriter 类来描述对Writer接口的实现:

e55bfc86be2fa2d90f85af6279597546.png

字符输入流:FileReader的一些常用方法

5c3ad4fbc71ccd5d4cf4455ca1804962.png

java中用 FileReader 类来描述对Reader接口的实现:

be35a5f8436e2189fb8e0a4ef02f1149.png

最后用一个实用的小例子来巩固一下对字符流的使用(文件的复制):

af82a250e1fb7a9326a4d87e0f738360.png

对于底层的IO字节字符流有了一定的认识后,可以休息一会了!!!。。。。。。。。。。。。。。。。。。。。。

下节要说的是更高级的流,包装流(流的分类中有提到),感谢阅读~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值