资讯专栏INFORMATION COLUMN

java学习(九) —— java中的File文件操作及IO流概述

ralap / 2240人阅读

摘要:字节流可以处理所有以为单位存储的文件,也就是说可以处理所有的文件,但是在处理字符的速度上不如字符流。文件字节输入流的读取时,是直接同字节流中读取的。原理就是在字节流的基础上增加了编解码的操作。

前言

流是干什么的:为了永久性的保存数据。

IO流用来处理设备之间的数据传输(上传和下载文件)

java对数据的操作是通过流的方式。

java用于操作流的对象都在IO包中。

java IO系统的学习,本质上就是对文件的读写操作。

File类

java中使用File来抽象一个文件,无论是普通文件还是目录,都可应对与一个File对象。

File只是抽象的代表来磁盘上的某个文件或者目录,内部实际上是依赖一个平台无关的本地文件系统类。

File无法对其所表示的文件内容进行任何读写操作(那是流做的事情)。

成员方法:

(1)创建功能:
    【1】public boolean createNewFile()
    【2】public boolean mkdir()
    【3】public boolean mkdirs()
(2)删除功能:public boolean delete()
(3)重命名功能:public boolean renameTo(File dest)
(4)判断功能:
    【1】public boolean isDirectory()
    【2】public boolean isFile()
    【3】public boolean exists()
    【4】public boolean canRead()
    【5】public boolean canWrite()
    【6】public boolean isHidden()
(5)获取功能:
    【1】public String getAbsolutePath()
    【2】public String getPath()
    【3】public String getName()
    【4】public long length()
    【5】public long lastModified()
(6)高级获取功能:
    【1】public String[] list()
    【2】public File[] listFiles()

流的分类

根据数据流向的不同分为输入流和输出流。

根据处理数据类型的不同分为字节流和字符流:

(1)字符流:顾名思义,该流只能处理字符,但处理字符速度很快。
(2)字节流:可以处理所有以bit为单位存储的文件,也就是说可以处理所有的文件,但是在处理字符的速度上不如字符流。

字符流的抽象基类:

(1)Reader:字符输入流的抽象类,所有字符输入流的实现都是它的子类
(2)Writer:字符输出流的抽象类,所有字符输出类的实现都是它的子类

字节流的抽象基类:

(1)InputStream:字节输入流的抽象类,是所有字节输入流的父类
(2)OutputStream:字节输出流的抽象类,是输出字节流的所有类的超类

字符流Reader派生的子类:

(1)CharArrayReader
(2)BufferedReader/LineNumberReader
(3)FilterReader
(4)InputStreamReader/FileReader

字符流Writer派生的子类:

(1)BufferedWriter
(2)CharArrayWriter
(3)FilterWriter
(4)OutputStreamWriter/FileWriter
(5)PrintWriter
(6)StringWriter

字节流InputStream派生的子类

(1)FileInputStream
(2)ObjectInputStream
(3)FilterInputStream/BufferedInputStream/DataInputStream/PushbackInputStream
(4)SequenceInputStream
(5)ByteArrayInputStream
(6)StringBufferInputStream)

字节流OutputStream派生的类:

(1)ByteArrayOutputStream
(2)FileOutputStream
(3)FilterOutputStream/BufferedOutputStream/DataOutputStream
(4)ObjectOutputStream

优化读写:字节缓冲流

字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多。这是加入了数组这样的缓冲区效果。

文件字节输入流的读取时,是直接同字节流中读取的。

由于字节流是与硬件(存储介质)进行的读取,所以速度较慢。

而cpu需要使用数据时通过read()、read(byte[])读取数据时就要受到硬件IO的慢速度限制。

cpu与内存发生的读写速度比硬件IO快10倍不止,那么就可以在内存建立缓冲区优化。

优化读写的思路:

(1)在内存中建立缓冲区
(2)先把存储介质中的字节读取到缓冲区
(3)cpu需要数据时直接从缓冲区读取
(4)缓冲区要足够大,在被读完后又触发fill()函数自动从存储介质的文件字节内容中读取字节存储到缓冲区数组。

转换流

转换流是字节流通向字符流的桥梁,可以将字节流转换为字符流。

原理就是在字节流的基础上增加了编解码的操作。

字符流 = 字节流 + 编码表

FileReader、FileWriter其实底层都是字节流,只不过额外的配置一个编码器、解码器,底层用字节读数据通过解码器转换成字符,或通过编码器将字符转换为字节再输出。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77111.html

相关文章

  • 快速Get-JAVA-IO

    摘要:除非文件用自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。 第四阶段 IO IO流 前言: 前面的学习我们只能够在已有的一定封闭范围内进行一些操作,但是这显然是无趣的,也是不支持我们实现一些复杂的需求,所以Java提供IO流这样一种概念,方便我们对数据进行操作 而使用IO流我们可以实现一些强大的功能,例如针对文件的移动复制等操作,又或者程序与外部文件之间的数据存储或者读...

    wangzy2019 评论0 收藏0
  • 我的阿里之路+Java面经考点

    摘要:我的是忙碌的一年,从年初备战实习春招,年三十都在死磕源码,三月份经历了阿里五次面试,四月顺利收到实习。因为我心理很清楚,我的目标是阿里。所以在收到阿里之后的那晚,我重新规划了接下来的学习计划,将我的短期目标更新成拿下阿里转正。 我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三月份经历了阿里五次面试,四月顺利收到实习offer。然后五月怀着忐忑的心情开始了蚂蚁金...

    姘搁『 评论0 收藏0
  • 1、转换 2、缓冲

    摘要:字符转换流原理字节流编码表。和作为子类,仅作为操作字符文件的便捷类存在。源目的先根据需求明确要读,还是要写。屏幕网络完全可以明确具体要使用哪个流对象。明确四是否需要额外功能呢额外功能转换吗转换流。高效吗缓冲区对象。 01转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码...

    sf190404 评论0 收藏0
  • Java IO学习笔记二

    摘要:学习笔记二流的概念在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。主要功能是向文件中写入内容构造函数根据给定的对象构造一个对象。 Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来...

    ideaa 评论0 收藏0
  • Java开发中对象的序列化与反序列化

    摘要:在中,对象的序列化与反序列化被广泛应用到远程方法调用及网络传输中。相关接口及类为了方便开发人员将对象进行序列化及反序列化提供了一套方便的来支持。未实现此接口的类将无法使其任何状态序列化或反序列化。 序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等。在网络传输过程中,可以...

    fox_soyoung 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<