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. GitHub搭建个人主页

    GitHub搭建个人主页 1.注册登录GitHub 2.新建仓库 新建一个名为"username.github.io",其中username为你的用户名,仓库必须为公有类型,私有仓 ...

  2. synchronized 的真正含义

    @synchronized 锁的永远是对象 ,只针对于对象,只能锁对象,常量等是不能加synchronized,一旦加编译也不会通过 @synchronized 锁对象中的非static 就是锁调用该 ...

  3. Codeup 25593 Problem G 例题5-7 求圆周率pi的近似值

    题目描述 用如下公式 4*Π = 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - 1/15 - 求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不 ...

  4. Keepalived实现Nginx负载均衡高可用

    第一章:keepalived介绍 VRRP协议 目的就是为了解决静态路由单点故障问题的 第二章: keepalived工作原理 2.1 作为系统网络服务的高可用功能(failover) keepali ...

  5. 惊呆了,Servlet Filter和Spring MVC Interceptor的实现居然这么简单

    前言 创建型:单例模式,工厂模式,建造者模式,原型模式 结构型:桥接模式,代理模式,装饰器模式,适配器模式,门面模式,组合模式,享元模式 行为型:观察者模式,模板模式,策略模式,责任链模式,状态模式, ...

  6. Feature list, Standard and Test plan for BETA Release 12/22/2015

    ===================BETA RELEASE FEATRURE LIST==================== 1. Log in and account manager for ...

  7. Xshell 中文提示乱码

    1.Alt+P 打开配置对话框,点击终端->编码,选择Unicode(utf-8)编码

  8. Laravel 5.7 RCE (CVE-2019-9081)

    Laravel 代码审计 环境搭建 Laravel 5.7 文档 : https://learnku.com/docs/laravel/5.7/installation/2242 Composer 下 ...

  9. 【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection

    论文地址:https://arxiv.org/abs/2004.10934v1 github地址:https://github.com/AlexeyAB/darknet 摘要: 有很多特征可以提高卷积 ...

  10. mybatis源码学习:从SqlSessionFactory到代理对象的生成

    目录 一.根据XML配置文件构建SqlSessionFactory 二.通过SqlSessionFactory创建SqlSession 三.getMapper获取动态代理对象 一.根据XML配置文件构 ...