黑马程序员技术交流社区

标题: 递归、IO-字符流 [打印本页]

作者: 小青年oh    时间: 2016-3-30 23:58
标题: 递归、IO-字符流

1. 递归
        在方法内部调用方法本身的编程技巧。
        注意事项:
                A: 递归一定要有出口,否则就是死递归
                B: 递归次数不要过多,否则内存溢出。
               
        递归删除和遍历时的一个注意事项:
                File[] files = file.listFiles();
                 -- 下面使用files对象时,有可能出空指针异常
                        解释:盘下有隐藏的系统文件,只能获取到文件名,但是没有操作权限。
                 加上一个判断 if(files != null) {...}
                 
        案例1:求阶乘
        案例2:斐波那契数列
        案例3:获取目录下所有特定后缀的文件
        案例4:删除带内容的文件夹
       
        断点:代码看不懂的时候怎么办? -- 调试,改bug


                输入还是输出 --- 一定要站在程序的角度
2. FileWriter
        字符输出流
                -- 使用FileWriter 向文本文件写入了一段字符串。
                步骤:
                1. 创建流对象。
                        调用系统资源创建了文件。(在不抛出异常的情况下,文件一定会被覆盖式创建。)
                        创建了输出流对象。
                        把输出流对象指向创建的文件。
                2.写入数据。
                3.刷新缓冲区。
                4.释放资源。 -- 释放资源之前,调用close() 方法前 会自动调用一次flush() 方法来刷新缓冲区。
                                                但是,不能替代手动的刷新。
                        面试题:为什么要close?
                                1.使流对象变成垃圾。
                                2.通知系统释放关于文件的资源。
       
        字节流
                字节输入流        读取数据        InputStream
                字节输出流        写入数据        OutputStream
        字符流
                字符输入流        读取数据        Reader
                字符输出流        写入数据        Writer

        FileWirter
                1. 写入数据的5种方式
                        void write(char[] cbuf)
                                写入字符数组。
                        abstract  void write(char[] cbuf, int off, int len)
                                写入字符数组的某一部分。
                         void write(int c)
                                写入单个字符。
                         void write(String str)
                                写入字符串。
                         void write(String str, int off, int len)
                                写入字符串的某一部分。
                2.换行
                        windows  \r\n
                        linux \n
                        mac   \r
                        跨平台的补充:File类的 static String separator
                                                        与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
                        "aaa\\bbb\\ccc.txt" -- "aaa" + File.separator + "bbb" + File.separator + "ccc.txt"
                3.追加数据
                        FileWriter(String fileName, boolean append) -- 是否追加
       
        FileReader
                字符输入流:
                步骤:
                        1.创建字符输入流对象
                        2.读取数据。判断是否有数据可读
                        3.释放资源。
       
        复制字符型文件
                1.封装数据源
                2.封装目的地
                3.读写操作
                4.关闭流。
       
        FileReader读取数据的标准代码
                int len = 0;
                char[] chs = new char[1024];
                while((len = fr.read(chs)) != -1) {
                        String s = new String(chs, 0, len);
                }
       
       
       
       





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2