前言

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

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

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

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

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

File类

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

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

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

  4. 成员方法:

(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. 根据处理数据类型的不同分为字节流和字符流:

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

3.字符流的抽象基类:

``

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

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

4.字节流的抽象基类:

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

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

5.字符流Reader派生的子类:

(1)CharArrayReader

(2)BufferedReader/LineNumberReader

(3)FilterReader

(4)InputStreamReader/FileReader

6.字符流Writer派生的子类:

(1)BufferedWriter

(2)CharArrayWriter

(3)FilterWriter

(4)OutputStreamWriter/FileWriter

(5)PrintWriter

(6)StringWriter

7.字节流InputStream派生的子类:

(1)FileInputStream

(2)ObjectInputStream

(3)FilterInputStream/BufferedInputStream/DataInputStream/PushbackInputStream

(4)SequenceInputStream

(5)ByteArrayInputStream

(6)StringBufferInputStream)

8.字节流OutputStream派生的类:

(1)ByteArrayOutputStream

(2)FileOutputStream

(3)FilterOutputStream/BufferedOutputStream/DataOutputStream

(4)ObjectOutputStream


** 优化读写:字节缓冲流**
1. 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多。这是加入了数组这样的缓冲区效果。
2. 文件字节输入流的读取时,是直接同字节流中读取的。
3. 由于字节流是与硬件(存储介质)进行的读取,所以速度较慢。
4. 而cpu需要使用数据时通过read()、read(byte[])读取数据时就要受到硬件IO的慢速度限制。
5. cpu与内存发生的读写速度比硬件IO快10倍不止,那么就可以在内存建立缓冲区优化。
6. 优化读写的思路:

(1)在内存中建立缓冲区

(2)先把存储介质中的字节读取到缓冲区

(3)cpu需要数据时直接从缓冲区读取

(4)缓冲区要足够大,在被读完后又触发fill()函数自动从存储介质的文件字节内容中读取字节存储到缓冲区数组。

转换流
转换流是字节流通向字符流的桥梁,可以将字节流转换为字符流。
原理就是在字节流的基础上增加了编解码的操作。
字符流 = 字节流 + 编码表
FileReader、FileWriter其实底层都是字节流,只不过额外的配置一个编码器、解码器,底层用字节读数据通过解码器转换成字符,或通过编码器将字符转换为字节再输出。 链接:https://segmentfault.com/a/1190000016388894?utm_source=sf-related
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

java学习(九) —— java中的File文件操作及IO流概述的更多相关文章

  1. Java文件操作(IO流)

     File 在java中用来表示文件和文件夹的具体类. File的构建 File的常见方法   字节流:       对象序列化:   字符流:     转接流: InputStreamReader. ...

  2. C#文件操作(IO流 摘抄)

    11 文件操作概述 11.1 驱动器 在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一个驱动器..NET Framework提供DriveInfo类和 D ...

  3. 文件操作,Io流。

    private void textBox1_TextChanged(object sender, EventArgs e) { } private void button1_Click(object ...

  4. Java学习-045-目录中文件拷贝

    挺晚的了,直接上码.敬请各位小主参阅,若有不足之处,敬请指正,非常感谢! 目录文件拷贝源码: /** * <strong>目录拷贝</strong><br> * & ...

  5. java中的File文件读写操作

    之前有好几次碰到文件操作方面的问题,大都由于时间太赶而没有好好花时间去细致的研究研究.每次都是在百度或者博客或者论坛里面參照着大牛们写的步骤照搬过来,之后再次碰到又忘记了.刚好今天比較清闲.于是就在网 ...

  6. Java学习之InputStream中read()与read(byte[] b)

    Java学习之InputStream中read()与read(byte[] b) 这两个方法在抽象类InputStream中都是作为抽象方法存在的, JDK API中是这样描述两者的: read() ...

  7. (转)java 从jar包中读取资源文件

    (转)java 从jar包中读取资源文件 博客分类: java   源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件 ...

  8. Android中使用File文件进行数据存储

    Android中使用File文件进行数据存储 上一篇学到使用SharedPerences进行数据存储,接下来学习一下使用File进行存储 我们有时候可以将数据直接以文件的形式保存在设备中, 例如:文本 ...

  9. [ Java学习基础 ] Java构造函数

    构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...

随机推荐

  1. Spark on Yarn运行时加载的jar包

    spark on yarn运行时会加载的jar包有如下: spark-submit中指定的--jars $SPARK_HOME/jars下的jar包 yarn提供的jar包 spark-submit通 ...

  2. 第六篇scrum冲刺

    一. 站立式会议 1.会议照片 2. 项目进展 团队成员 昨日完成任务 今日计划任务 吴茂平  新消息提醒功能设计 实现开发新消息提醒功能 陈忠明 歌曲批量下载压缩包 歌手收藏功能 吴尚谦  设计下载 ...

  3. DeepCoder: A Deep Neural Network Based Video Compression

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract: 在深度学习的最新进展的启发下,我们提出了一种基于卷积神经网络(CNN)的视频压缩框架DeepCoder.我们分别对预测 ...

  4. springcloud高级

    第一章 负载均衡 Ribbon   (Spring Cloud 高级)   一. Ribbon 在微服务中的作用   1 什么是 Ribbon   1.Ribbon 是一个基于 Http 和 TCP ...

  5. WPF新手快速入门系列 2.绑定

    [概要] 上一章讲了布局,按照市面上的书籍每一本讲的顺序都不一样,本系列是希望大家能快速上手去应对工作需要,所以本章就直接开始讲绑定. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:58074 ...

  6. 总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇

    本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  7. 数据去重Distinct,IEqualityComparer,IEquatable

    很多情况下我们查询数据需要去重重复数据,下面就记录三个去重的方法. Distinct 最基本的去重形式,直接查询出数据后使用Distinct方法进行字段去重. var strList = new Li ...

  8. Labview学习之路(四)公式和公式节点

    在labview里边,有公式和公式节点两个控件都可以实现表达复杂表达式的功能 公式 位置: 程序框图---编程---Express---算数与比较---公式 用法: 点开后是这个样子 可以任意添加输出 ...

  9. Queries for Number of Palindromes(区间dp)

    You've got a string s = s1s2... s|s| of length |s|, consisting of lowercase English letters. There a ...

  10. [HGAME] Week1 Web WriteUp

    一 .Cosmos的博客 打开题目之后,首页直接给了我们提示: 版本管理工具常用的有git和svn两种,这里提示了GitHub,考虑Git信息泄露,先访问/.git/目录考虑用Githack获取泄露信 ...