码迷,mamicode.com
首页 > 编程语言 > 详细

重踏学习Java路上_Day20(递归,IO流)

时间:2015-07-08 02:06:09      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

1:递归(理解)

技术分享

技术分享
    (1)方法定义中调用方法本身的现象
        举例:老和尚给小和尚讲故事,我们学编程
    (2)递归的注意事项;
        A:要有出口,否则就是死递归
        B:次数不能过多,否则内存溢出
        C:构造方法不能递归使用
    (3)递归的案例:
        A:递归求阶乘
        B:兔子问题
        C:递归输出指定目录下所有指定后缀名的文件绝对路径
        D:递归删除带内容的目录(小心使用)

2:IO流(掌握)

技术分享

技术分享
    (1)IO用于在设备间进行数据传输的操作    
    (2)分类:
        A:流向
            输入流    读取数据
            输出流    写出数据
        B:数据类型
            字节流    
                    字节输入流
                    字节输出流
            字符流
                    字符输入流
                    字符输出流
        注意:
            a:如果我们没有明确说明按照什么分,默认按照数据类型分。
            b:除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。
    (3)FileOutputStream写出数据
        A:操作步骤
            a:创建字节输出流对象
            b:调用write()方法
            c:释放资源
            
        B:代码体现:
            FileOutputStream fos = new FileOutputStream("fos.txt");
            
            fos.write("hello".getBytes());
            
            fos.close();
            
        C:要注意的问题?
            a:创建字节输出流对象做了几件事情?

             * A:调用系统功能去创建文件(若文件不存在就会去创建文件,而File类仅仅只是路径的抽象实例)
             * B:创建fos对象
             * C:把fos对象指向这个文件
            b:为什么要close()?

         * A:让流对象变成垃圾,这样就可以被垃圾回收器回收了
             * B:通知系统去释放跟该文件相关的资源
            c:如何实现数据的换行?

         刚才我们看到了有写文本文件打开是可以的,通过windows自带的那个不行,为什么呢?
         因为不同的系统针对不同的换行符号识别是不一样的?
         windows:\r\n
         linux:\n
         Mac:\r
         而一些常见的个高级记事本,是可以识别任意换行符号的。
            d:如何实现数据的追加写入?

        用构造方法带第二个参数是true的情况即可:public FileOutputStream(File file, boolean append)
    (4)FileInputStream读取数据
        A:操作步骤
            a:创建字节输入流对象
            b:调用read()方法
            c:释放资源
            
        B:代码体现:
            FileInputStream fis = new FileInputStream("fos.txt");
            
            //方式1
            int by = 0;
            while((by=fis.read())!=-1) {
                System.out.print((char)by);
            }
            
            //方式2
            byte[] bys = new byte[1024];
            int len = 0;
            while((len=fis.read(bys))!=-1) {
                System.out.print(new String(bys,0,len));
            }
            
            fis.close();
    (5)案例:2种实现
        A:复制文本文件
        B:复制图片
        C:复制视频
    (6)字节缓冲区流
        A:BufferedOutputStream
        B:BufferedInputStream
    (7)案例:4种实现
        A:复制文本文件
        B:复制图片
        C:复制视频
        
3:自学字符流
    IO流分类
        字节流:
            InputStream
                FileInputStream
                BufferedInputStream
            OutputStream
                FileOutputStream
                BufferedOutputStream
        
        字符流:
            Reader
                FileReader
                BufferedReader
            Writer
                FileWriter
                BufferedWriter

 

标准的四种字节输入输出流写法:

public class Demo01 {

    public static void main(String[] args) {
        Date start = new Date();
        //method01("01.avi", "123.avi");//时间太长,受不了了
        //method02("01.avi", "123.avi");//60毫秒
        //method03("01.avi", "123.avi");//花费:543毫秒
        method04("01.avi", "123.avi");//花费:24毫秒
        Date end = new Date();
        long time = end.getTime()-start.getTime();
        System.out.println("花费:"+time+"毫秒");
    }

    // 字节流输入输出:单一字节
    public static void method01(String inputfile, String outputfile) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(inputfile);
            fos = new FileOutputStream(outputfile);
            int by = 0;
            while ((by = fis.read()) != -1) {
                fos.write(by);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 字节流输入输出:字节数组
    public static void method02(String inputfile, String outputfile) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(inputfile);
            fos = new FileOutputStream(outputfile);
            byte[] array = new byte[1024];
            int len = 0;
            while ((len = fis.read(array, 0, array.length)) != -1) {
                fos.write(array, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 字节流输入输出:高效单一字节
    public static void method03(String inputfile, String outputfile) {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(inputfile));
            bos = new BufferedOutputStream(new FileOutputStream(outputfile));
            int by = 0;
            while ((by = bis.read()) != -1) {
                bos.write(by);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 字节流输入输出:高效字节数组
    public static void method04(String inputfile, String outputfile) {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(inputfile));
            bos = new BufferedOutputStream(new FileOutputStream(outputfile));
            byte[] array = new byte[1024];
            int len = 0;
            while ((len = bis.read(array, 0, array.length)) != -1) {
                bos.write(array, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

重踏学习Java路上_Day20(递归,IO流)

标签:

原文地址:http://www.cnblogs.com/canceler/p/4628944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!