IO流
1,复制一个文本文件。

1,明确体系:
        源:InputStream ,Reader
        目的:OutputStream ,Writer
    2,明确数据:
        源:是纯文本吗?是 Reader
        目的;是纯文本吗?是 Writer
    3,明确设备:
        源:硬盘上的一个文件。    FileReader
        目的:硬盘上的一个文件。FileWriter
        FileReader fr = new FileReader("a.txt");
        FileWriter fw = new FileWriter("b.txt");
    4,需要额外功能吗?
        需要,高效,使用buffer
        BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
        BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));
        
        
2,读取键盘录入,将数据存储到一个文件中。
    1,明确体系:
        源:InputStream ,Reader
        目的:OutputStream ,Writer
    2,明确数据:
        源:是纯文本吗?是 Reader
        目的;是纯文本吗?是 Writer
    3,明确设备:
        源:键盘,System.in
        目的:硬盘,FileWriter
        InputStream in = System.in;
        FileWriter fw = new FileWriter("a.txt");
    4,需要额外功能吗?
        需要,因为源明确的体系时Reader。可是源的设备是System.in。
        所以为了方便于操作文本数据,将源转成字符流。需要转换流。InputStreamReader
        InputStreamReader isr = new InputStreamReader(System.in);
        FileWriter fw  = new FileWriter("a.txt");
        需要高效不?需要。Buffer
        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));

3,读取一个文本文件,将数据展现在控制台上。
        1,明确体系:
            源:InputStream ,Reader
            目的:OutputStream ,Writer
        2,明确数据:
            源:是纯文本吗?是 Reader
            目的;是纯文本吗?是 Writer
        3,明确设备:
            源:硬盘文件,FileReader。
            目的:控制台:System.out。
            FileReader fr = new FileReader("a.txt");
            OutputStream out = System.out;
        4,需要额外功能?
            因为源是文本数据,确定是Writer体系。所以为了方便操作字符数据,
            需要使用字符流,但是目的又是一个字节输出流。
            需要一个转换流,OutputStreamWriter
            FileReader fr = new FileReader("a.txt");
            OutputStreamWriter osw = new OutputStreamWriter(System.out);
            
            需要高效吗?需要。
            BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
            BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

4,读取键盘录入,将数据展现在控制台上。
        1,明确体系:
            源:InputStream ,Reader
            目的:OutputStream ,Writer
        2,明确数据:
            源:是纯文本吗?是 Reader
            目的;是纯文本吗?是 Writer
        3,明确设备:
            源:键盘:System.in
            目的:控制台:System.out
            InputStream in = System.in;
            OutputStream out = System.out;
        4,需要额外功能吗?
            因为处理的数据是文本数据,同时确定是字符流体系。
            为方便操作字符数据的可以将源和目的都转成字符流。使用转换流。
            为了提高效率,使用Buffer
            BufferedReader bufr  =new BufferedReader(new InputStreamReader(Systme.in));
            BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

5,读取一个文本文件,将文件按照指定的编码表UTF-8进行存储,保存到另一个文件中。
        1,明确体系:
            源:InputStream ,Reader
            目的:OutputStream ,Writer
        2,明确数据:
            源:是纯文本吗?是 Reader
            目的;是纯文本吗?是 Writer
    
        3,明确设备:
            源:硬盘:FileReader.
            目的:硬盘:FileWriter
            
            FileReader fr = new FileReader("a.txt");
            FileWriter fw = new FileWriter("b.txt");
        4,额外功能:
            注意:目的中虽然是一个文件,但是需要指定编码表。
            而直接操作文本文件的FileWriter本身内置的是本地默认码表。无法明确具体指定码表。
            这时就需要转换功能。OutputStreamWriter,而这个转换流需要接受一个字节输出流,而且
            对应的目的是一个文件。这时就使用字节输出流中的操作文件的流对象。FileOutputStream.
            FileReader fr = new FileReader("a.txt");            
            OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");
            
            需要高效吗?
            BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
            BufferedWriter bufw =
                new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8"));
    
        
            
目前为止,10个流对象重点掌握。
字符流:
FileReader
FileWriter

BufferedReader
BufferedWriter

InputStreamReader
OutputStreamWrier
字节流:

FileInputStream
FileOutputStream

BufferedInputStream
BufferedOutputStream

File类:
    用于将文件和文件夹封装成对象。
    
    1,创建。
        boolean createNewFile():如果该文件不存在,会创建,如果已存在,则不创建。不会像输出流一样会覆盖。        
        boolean mkdir();
        boolean mkdirs();
    2,删除。
        boolean delete();
        void deleteOnExit();
        
    3,获取:
        String getAbsolutePath();
        String getPath();
        String getParent();
        String getName();
        long length();
        long lastModified();
        
    
    4,判断:
        boolean exists();
        boolean isFile();
        boolean isDirectory();

IO中的其他功能流对象:

1,打印流:
    PrintStream:字节打印流。
        特点:
        1,构造函数接收File对象,字符串路径,字节输出流。意味着打印目的可以有很多。
        2,该对象具备特有的方法 打印方法 print println,可以打印任何类型的数据。
        3,特有的print方法可以保持任意类型数据表现形式的原样性,将数据输出到目的地。
            对于OutputStream父类中的write,是将数据的最低字节写出去。
            
    PrintWriter:字符打印流。
        特点:
        1,当操作的数据是字符时,可以选择PrintWriter,比PrintStream要方便。
        2,它的构造函数可以接收 File对象,字符串路径,字节输出流,字符输出流。
        3,构造函数中,如果参数是输出流,那么可以通过指定另一个参数true完成自动刷新,该true对println方法有效。

什么时候用?
当需要保证数据表现的原样性时,就可以使用打印流的打印方法来完成,这样更为方便。
保证原样性的原理:其实就是将数据变成字符串,在进行写入操作。

SequenceInputStream:
    特点:
    1,将多个字节读取流和并成一个读取流,将多个源合并成一个源,操作起来方便。
    2,需要的枚举接口可以通过Collections.enumeration(collection);

ObjectInputStream 和 ObjectOutputStream

对象的序列化和反序列化。

writeObject  readObject

Serializable标记接口

关键字:transient

RandomAccessFile:
    特点:
    1,即可读取,又可以写入。
    2,内部维护了一个大型的byte数组,通过对数组的操作完成读取和写入。
    3,通过getFilePointer方法获取指针的位置,还可以通过seek方法设置指针的位置。
    4,该对象的内容应该封装了字节输入流和字节输出流。
    5,该对象只能操作文件。
    
    通过seek方法操作指针,可以从这个数组中的任意位置上进行读和写
    可以完成对数据的修改。
    但是要注意:数据必须有规律。

管道流:需要和多线程技术相结合的流对象。
PipedOutputStream
PipedInputStream

用操作基本数据类型值的对象。
    DataInputStream
    DataOutputStream

设备是内存的流对象。
ByteArrayInputStream ByteArrayOutputStream
CharArrayReader  CharArrayWriter

IO流体系:

字符流:
Reader
    |--BufferedReader:
        |--LineNumberReader
    |--CharArrayReader
    |--StringReader
    |--InputStreamReaer
        |--FileReader

Writer
    |--BufferedWriter
    |--CharArrayWriter
    |--StringWriter
    |--OutputStreamWriter
        |--FileWriter
    |--PrintWriter

字节流:
InputStream
    |--FileInputStream:
    |--FilterInputStream
        |--BufferedInputStream
        |--DataInputStream
    |--ByteArrayInputStream
    |--ObjectInputStream
    |--SequenceInputStream
    |--PipedInputStream

OutputStream
    |--FileOutputStream
    |--FilterOutputStream
        |--BufferedOutputStream
        |--DataOutputStream
    |--ByteArrayOutputStream
    |--ObjectOutputStream
    |--PipedOutputStream
    |--PrintStream

Java笔记(day23-day26)的更多相关文章

  1. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  2. java笔记00-目录

    --2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:

  3. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  4. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

  5. servlet(6) - servlet总结 - 小易Java笔记

    垂阅前必看: 这都是我总结的我觉得是学习servlet应该掌握的,我在学习期间也做了一个博客项目来让所学的知识得以巩固.下面就是博客项目链接.前面的servlet相关的笔记总汇,还有就是我把觉得在学习 ...

  6. Java笔记 —— 继承

    Java笔记 -- 继承 h2{ color: #4ABCDE; } a{ text-decoration: none!important; } a:hover{ color: red !import ...

  7. Java笔记 —— 方法重载和方法重写

    Java笔记 -- 方法重载和方法重写 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red ...

  8. Java笔记 —— 初始化

    Java笔记 -- 初始化 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red !impo ...

  9. Java笔记 —— this 关键字

    Java笔记 -- this 关键字 h2{ color: #4ABCDE; } a{ color: blue; text-decoration: none; } a:hover{ color: re ...

  10. Java 笔记 —— java 和 javac

    Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...

随机推荐

  1. Python Requests-学习笔记(4)-定制请求头和POST

    定制请求头 如果你想为请求添加HTTP头部,只要简单地传递一个 dict 给 headers 参数就可以了. import jsonurl = 'https://api.github.com/some ...

  2. hadoop(五)scp命令copy文件和配置(完全分布式准备二)|7

    机器的克隆参考centos7克隆ip|机器名|映射关系|别名配置(hadoop完全分布式准备一) 那么问题来了,如果我们有30台机器,之间可以互相访问,那我们如何快速安装配置环境如jdk hadoop ...

  3. Kubernetes 二进制部署

    目录 1.基础环境 2.部署DNS 3.准备自签证书 4.部署Docker环境 5.私有仓库Harbor部署 6.部署Master节点 6.1.部署Etcd集群 6.2.部署kube-apiserve ...

  4. java 第七周课后作业0417

    定义一个矩形类Rectangle:(知识点:对象的创建和使用)1 定义三个方法:getArea()求面积.getPer()求周长,showAll()分别在控制台输出长.宽.面积.周长.2 有2个属性: ...

  5. F - Select Half dp

    题目大意:从n个数里边选n/2个数,问和最大是多少. 题解:这是一个比较有意思的DP,定义状态dp[i][1],表示选了第i个数的最优状态,dp[i][0]表示没有选第i个数的最优状态. 状态是如何转 ...

  6. Hash记录字符串

    Hash记录字符串模板: mod常常取1e9+7,base常常取299,,127等等等....有的题目会卡Hash,因为可能会有两个不同的Hash但却有相通的Hash值...这个时候可以用双Hash来 ...

  7. 极验反爬虫防护分析之slide验证方式下图片的处理及滑动轨迹的生成思路

    本文要分享的内容是去年为了抢鞋而分析 极验(GeeTest)反爬虫防护的笔记,由于篇幅较长(为了多混点CB)我会按照我的分析顺序,分成如下四个主题与大家分享: 极验反爬虫防护分析之交互流程分析 极验反 ...

  8. 统计字符串中每种字符出现的评率(HashMap中getOrDefault(K, V)方法的使用)

    为了统计字符串中每种字符出现的频率,使用HashMap这种数据结构.其中,字符作为Key,出现的频率作为Value. 基本算法为: 1. 将字符串分成字符数组 2. (1)如果HashMap中的Key ...

  9. HTML+CSS教程(二)frameset框架和iframe内嵌

    一.框架 (frameset)1.用<frameset></frameset>代替了<body></body>2.rows设置行的占页面的百分比:col ...

  10. HTTPS之密钥知识与密钥工具Keytool和Keystore-Explorer

    1 简介 之前文章<Springboot整合https原来这么简单>讲解过一些基础的密码学知识和Springboot整合HTTPS.本文将更深入讲解密钥知识和密钥工具. 2 密钥知识-非对 ...