黑马程序员技术交流社区

标题: 递归及IO流总结 [打印本页]

作者: 地狱里的帅灵魂    时间: 2015-8-31 23:33
标题: 递归及IO流总结
递归:
        概述: 就是方法定义中调用方法本身的现象 ;
        注意事项:
                a: 递归一定要有出口
                b: 递归的次数不宜过多

        递归体现的思想:                拆分思想和合并思想
       
        第一个练习题:        求5的阶乘
                                        public static int jieCheng(int n) {
                                                if(n == 1 ){
                                                        return 1 ;
                                                }else {
                                                        return n * jieCheng(n - 1);
                                                }
                                        }
        第二个练习题:        不死神兔
                                       
                                        public static int getCount(int n){
                                                if(n == 1 || n == 2 ){
                                                        return 1 ;
                                                }else {
                                                        return getCount(n - 1) + getCount(n -2) ;
                                                }
                                        }

        第三个练习题:        输出指定目录下所有的以.java结尾的文件的绝对路径
                                       
                                        public static void printFilePathName(File file) {
                                               
                                                // 获取指定的路径下所有的文件或者文件夹对应的File数组
                                                File[] files = file.listFiles() ;
                                               
                                                // 遍历
                                                for(File f : files) {
                                               
                                                        // 判断
                                                        if(f.isFile()){
                                                                if(f.getName().endsWith(".java")){
                                                                        System.out.println(f.getAbsolutePath()) ;
                                                                }
                                                        }else {
                                                                printFilePathName(f) ;
                                                        }
                                               
                                                }
                                       
                                        }

        第四个练习题:        删除文件夹
                       
                                        public static void deleteFolder(File file){
                                               
                                                // 获取指定的路径下所有的文件或者文件夹对应的File数组
                                                File[] files = file.listFiles() ;
                                               
                                                // 遍历
                                                for(File f : files) {
                                                       
                                                        // 判断
                                                        if(f.isFile()) {
                                                                System.out.prinltn(f.getAbsolutePath() + "----" + f.delete()) ;
                                                        }else {
                                                                deleteFolder(f) ;
                                                        }
                                                }

                                                // 删除文件夹
                                                System.out.println(file.getAbsolutePath() + "---" + file.delete()) ;
                                        }

IO流 :

        I: 输入
        O: 输出

        什么是输入和输出: 说这个输入和输出问题是相对于内存而言的.

        分类:
                a: 按照流向进行划分
                        输入流
                        输出流
                b: 按照操作数据的类型
                        字节流
                        字符流

                在以后的开发过程中我们到底使用的是字节流还是字符流?
                如果我们操作的是文本文件,那么我们优先考虑字符流.

        字节流
                字节输入流                InputStream                        读
                字节输出流                OutputStream                写
        字符流               
                字符输入流                Reader                                读
                字符输出流                Writer                                写

        上边的这四个类都是抽象类,不能直接使用,我们只能使用它的子类.并且通过查看API我们可以发现他们的子类都有一个特点: 子类的名称都是一个父类为后缀的

        IO流的操作步骤:
                a: 创建io流对象
                b: 调用方法进行读或者写
                c: 释放资源

        使用字节输出流写数据:
                FileOutputStream
                构造方法:
                        public FileOutputStream(File file) ;
                        public FileOutputStream(String name) ;
                        public FileOutputStream(String name , boolean append) ;                        // 实现追加写
                        public FileOutputStream(File file , boolean append) ;                        // 实现追加写
                写的成员方法:
                        public void write(int by) : 一次写一个字节
                        public void write(byte[] bytes) : 一次写一个字节数组
                        public void write(byte[] bytes , int off , int len ): 一次写一个字节数组中的一部分

                在windows操作系统中的换行符是: "\r\n"
                在linux操作系统中的换行是: "\n"
                在mac操作系统中的换行是:   "\r"

                FileInputStream
                构造方法:
                        public FileInputStream(File file) ;
                        public FileInputStream(String name) ;
                读取数据的方法:
                        public int read(): 一次读取一个字节
                        public int read(byte[] bytes) : 一次读取一个字节数组 , 返回值表示的意思是: 读取到的有效的字节个数

                复制文件:
                        步骤:
                                a: 创建字节输入流和字节输出流对象
                                b: 频繁的读写操作
                                        一次读取一个字节复制文件
                                        一次读取一个字节数组复制文件
                                c: 释放资源

                                public static void copyFile() {
                                       
                                        //  创建字节输入流和字节输出流对象
                                        FileInputStream fis = new FileInputStream("a.txt") ;
                                        FileOutputStream fos = new FileOutputStream("b.txt");

                                        // 一次读取一个字节复制文件
                                        int by = 0 ;
                                        while((by = fis.read()) != -1){
                                                fos.write(by) ;
                                        }

                                        // 释放资源
                                        fos.close() ;
                                        fis.close() ;
                               
                                }

                                public static void copyFile() {
                                       
                                        //  创建字节输入流和字节输出流对象
                                        FileInputStream fis = new FileInputStream("a.txt") ;
                                        FileOutputStream fos = new FileOutputStream("b.txt");

                                        // 一次读取一个字节数组复制文件
                                        byte[] bytes = new byte[1024] ;
                                        int len = 0 ;
                                        while((len = fis.read(bytes)) != -1){
                                                fos.write(bytes , 0 , len) ;
                                        }

                                        // 释放资源
                                        fos.close() ;
                                        fis.close() ;
                               
                                }
        高效的字节输入流和高效的字节输出流:

                高效的字节输出流:   BufferedOutputStream
                                构造方法:   public BufferedOutputStream(OutputStream os) ;

                高效的字节输入流:        BufferedInputStream
                                构造方法:   public BufferedInputStream(InputStream is) ;


                复制文件使用高效的字节输入流和字节输出流:

                        public static void copyFile() {

                                // 创建高效的字节输入流和字节输出流对象
                                BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt")) ;
                                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("b.txt")) ;
                               
                                // 一次读取一个字节复制文件
                                int by = 0 ;
                                while((by = bis.read()) != -1){
                                        bos.write(by) ;
                                }

                                // 释放资源
                                bos.close() ;
                                bis.close() ;
                        }

                        public static void copyFile() {

                                // 创建高效的字节输入流和字节输出流对象
                                BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt")) ;
                                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("b.txt")) ;
                               
                                // 一次读取一个字节数组复制文件
                                byte[] bytes = new byte[1024] ;
                                int len = 0 ;
                                while((len = bis.read(bytes)) != -1){
                                        bos.write(byte, 0 , len) ;
                                }

                                // 释放资源
                                bos.close() ;
                                bis.close() ;
                        }

作者: 地狱里的帅灵魂    时间: 2015-9-2 09:28
共勉,加油,黑马
作者: ln0491    时间: 2015-9-2 09:37
学习了,加油
作者: 耀阳圣尊    时间: 2015-9-2 14:18
总结的不错,赞一个
作者: 淡忘初学者    时间: 2015-9-2 15:15
貌似包含好多内容哦~~加油
作者: 陈劲松    时间: 2015-9-2 16:34
这个好东西,收了




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