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. Altium Designer 3D

  2. 全方位认识HBase:一个值得拥有的NoSQL数据库(一)

    前言:说起HBase这门技术,在认知上对于稍微接触或使用过它的人来讲,可能只是百千数据库中一个很普通的库,大概就像我对Redis的认知一样:缓存嘛!可对于HBase,我确实是带着某些感情在的.今日突然 ...

  3. java 方法 在jvm中的调用

    java 某个类的几个对象,这些对象调用类中一个函数,是各自拥有自己的函数代码还是使用同一段代码?30 1.java 某个类的几个对象,这些对象调用类中一个函数(普通的函数),是各自拥有自己的函数代码 ...

  4. Java学习成长第一集

    由于最近所在项目组的项目临近结尾,所以有时间对自己近来的学习做个总结.不得不说,程序员不学习就退步这句话是真的很让人信服!自己入行将近一年的时间,所学的就是Java开发的专业,很羞愧的是现在的自己能力 ...

  5. AJ学IOS(06)UI之iOS热门游戏_超级猜图

    AJ分享,必须精品 先看效果图 思路 需求分析 1,搭建界面 1>上半部分,固定的,用Storyboard直接连线(OK) 2>下半部分,根据题目的变化,不断变化和调整,用代码方式实现比较 ...

  6. Golang Web入门(2):如何实现一个高性能的路由

    摘要 在上一篇文章中,我们聊了聊在Golang中怎么实现一个Http服务器.但是在最后我们可以发现,固然DefaultServeMux可以做路由分发的功能,但是他的功能同样是不完善的. 由Defaul ...

  7. svg 实践之屏幕坐标与svg元素坐标转换

    近期在做svg相关项目,很好用的东西要记下来: 1.基础知识就是根据 矩阵进行坐标转换,如下: : 屏幕坐标 = 矩阵* svg对象坐标 2.javascript有个方法用于获取 svg对象 的转换矩 ...

  8. 【three.js第六课】物体3D化

    1.在[three.js第五课]的基础上引入AnaglyphEffect.js文件. 文件路径: three源码包中进入[examples]文件夹: 进入[js]文件夹: 进入[effects]文件夹 ...

  9. Python操作MySQL之查看、增删改、自增ID

    在python中用pymysql模块来对mysql进行操作,该模块本质就是一个套接字客户端软件,使用前需要事先安装,在cmd中输入: pip3 install pymysql 1.查看 import ...

  10. PHP pcntl

    来源:https://www.jianshu.com/p/de0b74f58f50 pcntl是一个可以利用操作系统的fork系统调用在PHP中实现多线程的进程控制扩展,当使用fork系统调用后执行的 ...