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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 薛灵云 中级黑马   /  2015-8-29 22:01  /  509 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1. 递归
        方法内部调用方法本身的一种编程技巧。
                -- 把复杂的问题分解成若干类似的简单的问题,一致持续下去,直到简单的问题能够直接求解。
                        那么原来复杂的问题就由简单问题的答案反推得解。
                       
        注意:
                递归必须有出口。
                递归的次数不能太多。
               
                构造方法不能递归调用。
               
        写递归方法:
                1) 找出口
                2) 找规律
               
        应用:
                1) 阶乘
                2) 斐波那契数列(黄金分割数列)
                        1 1 2 3 5 8 13。。。
                       
                        补充: 穷举法 -- 列出足够多的项来找规律, 通过任意一项验证一下。
                       
                3) 遍历获取目录下(包括子目录)所有指定文件
               
                        注意:
                                File[] fileArray = file.listFiles();
                                // 此处加做一个非null判断(因为有些文件是没有操作权限的,是拿不到的)
                                if(fileArray != null){
                                        // 再做其他的业务逻辑
                                }
                               
               
                4) 删除带子内容的文件夹
                        注意:
                                删除完了文件夹下的文件,循环的外面别忘了删除该文件夹
               
        练习:
                需求:用递归求下列数列的第二十项的值:
                        1,1,2,4,7,13,24...
                       
       
2. 字符流

        IO流程序操作步骤:
                1)封装数据源
                        -- 创建输入流对象
                2)封装目的地
                        -- 创建输出流对象
                3)读写操作
                        -- (如果是字符流)刷新数据
                4)释放资源
                        -- close()
               
3. 字符输出流
        继承结构:
                Writer -- OutputStreamWriter -- FileWriter
       
        FileWriter构造:
                FileWriter(File file)
                FileWriter(String pathname)
                        -- 只要不抛出异常,文件就会被覆盖式创建
               
                FileWriter(File file, boolean append)
                FileWriter(String pathname, boolean append)
                        -- 是否追加写入
               
                       
                此处做了三件事情:
                        1)调用系统资源创建文件
                        2)创建字符输出流对象
                        3)将输出流对象指向创建的文件
       
        写入数据的功能:       
                write(String str)
                        -- 写入一个字符串
                write(String str, int start, int len)
                        -- 写入一个字符串
                write(char[] chs)
                        -- 写入一个字符数组
                write(char[] chs, int start, int len)
                        -- 写入一个字符数组一部分
                write(char ch)
                        -- 写入一个字符
                       
                "\r\n" - windows
                "\n" -- linux
                "\r" -- mac
                       
        刷新数据:
                flush()
                        -- 因为是字符流,所以要刷新缓冲区
       
        释放资源:
                close()
                        1) 让流对象变成垃圾
                        2) 通知系统去释放与文件相关的资源
               

        问题1:为什么FileWriter没有无参构造方法?
                因为写数据的时候,一定要明确写到哪里去。

        问题2:flush()和close()的区别?
                flush():只刷新缓冲区,流对象还可以继续使用。
                close():先刷新缓冲区,再关闭流对象。流对象不可以继续被使用

        问题3:难道每次调用方法的时候,都需要刷新吗? 或者说,不用刷,直接等到close()来解决,行不行?
                这两种方式都不可取。应该设置刷新条件.
       
4. 字符输入流FileReader
        继承结构:
                Reader -- InputStreamReader -- FileReader
       
        构造方法:
                FileReader(File file)
                FileReader(String pathname)
       
        读取数据方式1: 一次读取一个字符
                重要部分的代码:
                        /*
                        int ch = fr.read();
                        while (ch != -1) {
                                sop((char) ch);
                                ch = fr.read();
                        }
                        */
                       
                        int ch = 0;
                        while ((ch = fr.read()) != -1) {
                                //sop((char) ch);
                                fw.write(ch);
                        }
               
        读取数据方式2: 一次读取一个字符数组
                int read(char[] chs)
                        -- 返回值int表示实际的读取长度
                       
                char[] chs = new char[1024];
                int len = 0;
                while((len = fr.read(chs)) != -1){
                        fw.write(chs, 0, len);
                }
               
                注意事项:
                        fr.read(chs) -- 别忘了把数组传进去
                       
                        fw.write(chs, 0, len); -- 别忘了写入数组的实际读取长度
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               


5 个回复

倒序浏览
赞一个 ,棒棒的
回复 使用道具 举报
学起来~~~
回复 使用道具 举报
好长,,感谢楼主
回复 使用道具 举报
还没学到呢
回复 使用道具 举报
不错,谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马