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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 路人丶 中级黑马   /  2017-12-18 21:57  /  1441 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学习了I/O,以前基础班学了一个字符流,现在从File学着走,学习了字节流,虽然自己以前看了视频,但也忘记了很多,今天一讲,也会加深一些印象,今天详细笔记如下:
I/O流
一、File类概述
        File:文件和目录路径名的抽象表示形式
        构造方法:
                a:File(String pathname) :将一个字符串路径封装成File对象
                b:File(String parent,String child):传入一个父级路径和子级路径
                c:File(File parent,String child):传入一个File类型的父级路径和子级路径
        主要方法:
                a:判断功能
                        1.boolean exists():判断指定路径的文件或文件夹是否存在
                        2.boolean isAbsolute():判断当前路路径是否是绝对路径
                        3.boolean isDirectory():判断当前的目录是否存在
                        4.boolean isFile():判断当前路径是否是一个文件
                        5.boolean isHidden():判断当前路径是否是隐藏文件
                b:获取功能
                        1.File getAbsoluteFile():获取文件的绝对路径,返回File对象
                        2.String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
                        3.String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径
                        4.File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径
                        5.String getName():获取文件或文件夹的名称
                        6.String getPath():获取File对象中封装的路径
                        7.long lastModified():以毫秒值返回最后修改时间(与Date使用可以得出最后修改日期)
                        8.long length():返回文件的字节数(注意,文件夹调用方法返回0,查看文件夹要遍历所有子文件,统计文件大小和)
                        修改功能:
                        9.boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径
                c:其他功能
                        1.String[] list():以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
                        2.File[] listFiles():以File对象的形式返回当前路径下所有的文件和文件夹的名称
                        3.static File[] listRoots():获取计算机中所有的盘符
二、I/O流分类
        按流向分
                输入流        读取数据
                输出流        写入数据
        按数据类型分
                字节流       
                        字节输入流        InputStream
                        字节输出流        OutputStream

                字符流
                        字符输入流        FileReader
                        字符输出流        FileWriter
三、使用情况
        a:字符流:适用于文本文件的读写操作(只能是在电脑上能用记事本打开,并且不乱码的情况下)
        b:字节流:所有文件都行,但是文本文件读写的时候要注意编码格式,如果不对应会出现乱码
                (utf-8,GBK等),视频,音频,图片只能用字节流。
四、综合练习
        public static void main(String[] args) throws Exception {

                File cdir = getDir();   //使用getDir方法获取复制源文件夹
                File vdir = getDir();        //使用getDir方法获取复制目的地文件夹
                copyDirectoryToDirectory(cdir, vdir);   //调复制文件夹的方法
               
                System.out.println("复制完成");
        }
       
        //键盘录入文件夹
        public static File getDir(){
                System.out.println("请输入一个文件夹路径:");
                Scanner s = new Scanner(System.in);
                while(true){
                        String line = s.nextLine();
                        File dir = new File(line);
                        if(!dir.isDirectory()){
                                System.out.println("您输入的文件夹路径有误,请重新输入!");
                        }else {
                                return dir;
                        }
                }
        }

        /**
         * 复制文件夹
         * @param cdir   源文件夹
         * @param vdir   目的地文件夹
         * @throws IOException
         */
        public static void copyDirectoryToDirectory(File cdir,File vdir) throws IOException{
                File newDir = new File(vdir, cdir.getName());   //把源文件夹名字  复制到目的文件夹
                if(!newDir.exists()){    //目的文件夹里面没有源文件夹  创建
                        newDir.mkdir();
                }
                File[] listFiles = cdir.listFiles();  //创建源文件夹文件数组
                for(File list:listFiles){   //遍历源文件夹
                        if(!list.isDirectory()){   //判断是文件夹还是文件,文件就用字节流复制
                                //1.输入流
                                FileInputStream fis = new FileInputStream(list);
                                //2.输出流,封装的新文件夹下的文件
                                File list2 = new File(newDir, list.getName());
                                FileOutputStream fos = new FileOutputStream(list2);
//                                FileOutputStream fos = new FileOutputStream(newDir,list.getName());  //fos没有传文件,文件名字的方法,所以要先封装
                                //字节数组,存输入流读取的字节  1024的整数倍
                                byte[] bys = new byte[1024*64];
                                //字节数组读取了多少个
                                int len = 0;
                                //循环,当读到没有的时候结束
                                while((len = fis.read(bys)) != -1){
                                        //写出读到的字节
                                        fos.write(bys, 0, len);
                                }
                                //关流
                                fis.close();
                                fos.close();
                        }else{//文件夹就递归
                                copyDirectoryToDirectory(list, newDir);
                        }
                }
        }

4 个回复

正序浏览
笔记记得很认真哟,不错
回复 使用道具 举报
   加油哦
回复 使用道具 举报
哇,不错哟,保持,继续努力哈
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马