A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© MichaelLian 中级黑马   /  2016-5-2 18:41  /  626 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求IO流知识架构

3 个回复

倒序浏览
io流
输入流
输出流
字符流
字节流
回复 使用道具 举报
IO流小结(掌握)

        1.File
                创建文件对象,对硬盘里的文件进行操作.
                File file = new File("path");  //ptah可以是绝对路径也可以是相对路径
                判断
                获取
                删除
                新创建
        2.异常
                根类:
                Throwable  
                        --Error  这个是错误,一般程序无法拯救
                        --Exception 程序出现的异常,一般是程序员编码导致
                                --RuntimeException   编译不报错 运行时报错
                                        NullPointerException  ClassCastException ArrayIndexOutOfBoundsException  
                                --编译异常   编译器就会报错
        3.IO流(字节流& 字符流)
                |--字节流
                        |--字节输入流
                                InputStream 往进读
                                        |--FileInputStream  --操作文件文件的流
                                        |--BufferedInputStream   -- 字节包装流
                                                int read():一次读取一个字节
                                                int read(byte[] bys):一次读取一个字节数组                       
                                       
                        |--字节输出流
                                OutputStream  往出写
                                                |--FileOutputStream
                                                |--BufferedOutputStream
                                                        void write(int by):一次写一个字节
                                                        void write(byte[] bys,int index,int len):一次写一个字节数组的一部分
                                       
                               
                |--字符流   --操作文本文件, 不能操作非文本文件
                        |--字符输入流
                                Reader
                                        |--BufferedReader
                                                String readLine():一次读取一个字符串    while((line = br.readLine()) != null)
                                        int read():一次读取一个字符  (中文GBK编码下占2个字节,一个字符)
                                                char[] charArr = new char[1024<<3]
                                        int read(char[] chs):一次读取一个字符数组                                       
                                        |--InputStreamReader  ------  Input Reader   他就是一个转换, 把子字节流转换成字符流
                                                |--FileReader
                                               
                                               
                        |--字符输出流
                                Writer
                                        void write(int ch):一次写一个字符
                                        void write(char[] chs,int index,int len):一次写一个字符数组的一部分
                                       
                                        |--OutputStreamWriter
                                                |--FileWriter
                                        |--BufferedWriter
                                                void newLine():写一个换行符 (跨平台) 代表的意思就是回车换行
                                               
                                                void write(String line):一次写一个字符串

        4.IO的其他流
                1)序列流 --- 作用: 可以把多个输入流整合成一个输入流 ( 拼接一个map3串烧)
                SequenceInputStream
                问题: 如果有很多输入流怎么整合?  通过他的构造传入一个枚举对象,完成多个流的整合,枚举里面装的是多个流
               
                2)内存流  --- 作用: 该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据(读入的文件不能太)
                使用方式
                创建对象:ByteArrayOutputStream baos = new ByteArrayOutputStream();
                写出数据: write(int), write(byte[] , 0 ,len)
                获取数据: toByteArray()   -------------   byte[] arr = baos.toByteArray(); 缓冲区的数据全部获取出来.
                还可以直接打印的baos

                3)随机访问流(雌雄同,即是输入流也是输出流)
                RandomAccessFile类不属于流,是Object类的子类。但它融合了InputStream和OutputStream的功能, 即使输入流,又是输出. (雌雄同体)
                创建对象: RandomAccessFile raf = new RandomAccessFile("g.txt", "rw");  /r代表可读, w代表可写
                read(),write(),seek()   ---> raf.seek(0);设置指针 raf(100) 从101开始写
                用途: 多线程下载

                4)对象操作流
                该流可以将一个对象写出, 或者读取一个对象到程序中. 也就是执行了序列化和反序列化的操作
                序列化:将对象写出到文件               
                创建输出流对象:ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"))
                写入对象 oos.writeObject(new Person("张三",18));
                反序列化:将文件中的字节数据翻译成对象                       
                创建输入流对象:ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
                Person p1 = (Person) ois.readObject();

                注意: 被序列化的对象,该类必须实现Serializable接口,
                (给被序列化的类添加序列号id)如: private static final long serialVersionUID = 1L;
               
                5)数据输入输出流
                作用:  DataInputStream, DataOutputStream可以按照基本数据类型大小读写数据
                创建输出流对象:DataOutputStream dos = new DataOutputStream(new FileOutputStream("b.txt"));
                给文件写一个int值: dos.writeInt(997);
                write(997)  ---> 按照GBK编码找到字符---> 写到文件
                创建输出流对象: DataInputStream dis = new DataInputStream(new FileInputStream("b.txt"));
                读出一个int值: int x = dis.readInt();

                6)打印流
                作用: 该流可以很方便的将对象的toString()结果输出, 并且自动加上换行, 而且可以使用自动刷出的模式
                创建对象: PrintStream ps = System.out;
                              PrintWriter pw = new PrintWriter(new FileOutputStream("g.txt"), true);  //true:表示自动刷新
                          注意: pw.print(97);    无自动刷出
                                        pw.write(99);        无自动刷出
                                    pw.println(97);  有自动刷出

                7)标准输入输出流
                        System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据
                        System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据
                        修改输入流: System.setIn(InputStream)
                        修改输出流: System.setOut(PrintStream)

                8)两种方式实现键盘录入
                        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));    (InputStreamReader)--- 转换流(字节到字符的转换)
                        String line = br.readLine();

                        Scanner
                        String line = sc.nextLine();

                9)Properties  是Hashtable的子类,双键集合
                作用: Properties 可保存在流中或从流中加载,属性列表中每个键及其对应值都是一个字符串。
                Properties的特殊功能
                        public Object setProperty(String key,String value)   -----> 设置属性
                        public String getProperty(String key)                ----->根据键获取值
                        public Enumeration<String> stringPropertyNames()     ----->获取键的集合
                Properties的load()和store()功能
                        prop.load(new FileInputStream("config.properties"));                   //将文件上的键值对读取到集合中
                        public Object setProperty(String key,String value)  ---        把文件读到内存,然后修改其内容
                        prop.store(new FileOutputStream("config.properties"), null);   //将修改后的内存存储在文件中,第二个参数是对列表参数的描述,可以给值,也可以给null
               
回复 使用道具 举报
受教!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马