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

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

IO(File类和字节流)
作者:一衡
今日主要学习了file,和字节流的读取和复制,最难的案例为复制文档.
一、File
1、构造方法
File(String pathname) :将一个字符串路径封装成File对象
File(String parent,String child):传入一个父级路径和子级路径
File(File parent,String child):传入一个File类型的父级路径和子级路径
2、删除功能
boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false
boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false  
boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
boolean delete():删除文件或者删除单级文件夹。
删除文件只能一级一级删除。
3、判断功能
boolean exists():判断指定路径的文件或文件夹是否存在。
boolean isAbsolute():判断当前路路径是否是绝对路径。
boolean isDirectory():判断当前的目录是否存在。
boolean isFile():判断当前路径是否是一个文件。
boolean isHidden():判断当前路径是否是隐藏文件。
4、获取功能和修改功能
File getAbsoluteFile():获取文件的绝对路径,返回File对象
String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径
File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径
String getName():获取文件或文件夹的名称
String getPath():获取File对象中封装的路径
long lastModified():以毫秒值返回最后修改时间
long length():返回文件的字节数
boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径。
5、其他功能
String[] list():以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
File[] listFiles():File对象的形式返回当前路径下所有的文件和文件夹的名称
static File[] listRoots():获取计算机中所有的盘符
主要的代码
File很多的查找和统计,复制主要是以递归思想所表现的
static long sum = 0 ;
        public static void printFile(File f, String s1, String s2) {
               
                if (f.isDirectory()) {
                        File[] arr = f.listFiles();
                        for (File file : arr) {
                                if (file.isFile()) {
                                        if (file.getName().endsWith(s1) || file.getName().endsWith(s2)) {
           long chang = file.length();
            sum += chang ;
            System.out.println(file.getName());
               }
          } else {
           //操作索引的子文件夹
          printFile(file, s1, s2);
                        }
                    }
            }
        }
其中String s1 String s2 可以用String... s 替换可以查找多个后缀名的文件。
二、字符流和字节流
字符流前面IO已经学习
字符流
字节流代码:
public static void main(String[] args) throws IOException  {
                //创建字符输入流对象
                FileReader fr = new FileReader("IODemo.java");
                //创建字符输出流对象
                FileWriter fw = new FileWriter("d:\\IODemo.java");
int len;//用于存储读到的字符个数
        char[] chs = new char[1024];
         while((len = fr.read(chs)) != -1) {
         fw.write(chs,0,len);
       fw.flush();
          }
               
       //释放资源
       fw.close();
       fr.close();
    }
}
字节流可以操作所有类型的文件,因为所有的文件在计算机中都是以字节形式存储
而字符流只能用来操作纯文本类型的文件,不能操作字节类型的文件
复制文档案例:
public class Demo {
        public static void main(String[] args) throws IOException {
                File scr = new File("F:\\PGP");
                System.out.println(scr.getName());
                File dir = new File("D:\\");
                dir.mkdirs();
                copy(scr,dir);
        }
        public static void copy(File scr ,File dir) throws IOException {
                if(scr.isDirectory() && dir.exists()){
                        //创建目标目录
                        File newDir = new File(dir , scr.getName());
                        //如果不存在文件
                        if(!newDir.exists()) {
                                newDir.mkdir();
   }
                       
                        File[] files = scr.listFiles();
                        for (File file : files) {
                                if (file.isFile()) {
                                        //创建输入流
                                        FileInputStream fr = new FileInputStream(file);
                                        //创建输出流想要的路径加上文件名
                FileOutputStream fw=new FileOutputStream(new File(newDir,file.getName()));
                                        //字节输入
                                        byte[] bys = new byte[1024];
                                        int len ;
                                        while((len = fr.read(bys)) != -1){
            fw.write(bys, 0, len);
           }
          fr.close();
          fw.close();
                                       
           }else if(file.isDirectory()){
           //递归
                                       
          copy(file, newDir);
                  }
                               
              }
           }
        }
  }

5 个回复

倒序浏览
回复 使用道具 举报

回复 使用道具 举报
这总结,杠杠的
回复 使用道具 举报
不错不错    杠杠的   加油
回复 使用道具 举报
杠杠的   加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马