一.File

1.IO技术概述

  • Output:把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作
  • Input:把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作
  • IO操作:把上面的这种输入和输出动作称为IO操作

2.File类的概述和作用

  • File类的概述和作用
  • File类是文件和目录路径名的抽象表示形式
  • Java中把文件或者目录(文件夹)都封装成File对象
  • 我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可

3.File静态的成员变量

  • pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串
  • separator:与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串
  • 实例代码
/*
     *  java.io.File
     *    将操作系统中的,文件,目录(文件夹),路径,封装成File对象
     *    提供方法,操作系统中的内容
     *    File与系统无关的类
     *    文件 file
     *    目录 directory
     *    路径 path
     */
public class FileDemo {
  public static void main(String[] args) {
      //File类静态成员变量
      //与系统有关的路径分隔符
      String separator = File.pathSeparator;
      System.out.println(separator);// 是一个分号,目录的分割(window中环境变量配置各个路径用分号分割,表示一个完整的路径结束)  Linux和Mac中是冒号 :

      //与系统有关的默认名称分隔符
      separator = File.separator;
      System.out.println(separator);// 目录分隔符 windows是\ Linux和Mac是/ 
  }
}

4.File类的构造方法

  • File类的构造方法
  • 相对路径和绝对路径
  • 绝对路径:绝对路径是一个固定的路径,从盘符开始
  • 相对路径:表示路径之间的相对关系
  • File(String pathname):通过将给定路径名字符串转换为一个File对象,之后可以使用File中的方法(windows中的路径或文件名不区分大小写)【注意:不对pathname是否存在做判断】
  • 实例代码
public class FileDemo1 {
    public static void main(String[] args) {
        function();
    }
    /*
                 *  File(String pathname)
                 *  传递路径名: 可以写到文件夹,可以写到一个文件
                 *  c:\abc   c:\abc\Demo.java
                 *  将路径封装File类型对象
                 */
    public static void function(){
        File file = new File("d:\eclipse");
        System.out.println(file);
    }
}
  • File(String parent,String child):根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 对象
  • File(File parent,String child)
  • 实例代码
public class FileDemo1 {
    public static void main(String[] args) {
        function_2();
    }
    /*
         *  File(File parent,String child)
         *  传递路径,传递File类型父路径,字符串子路径
         *  好处: 父路径是File类型,父路径可以直接调用File类方法
         */
    public static void function_2(){
        File parent = new File("d:");
        File file = new File(parent,"eclipse");
        System.out.println(file);
    }

    /*
         *  File(String parent,String child)
         *  传递路径,传递字符串父路径,字符串子路径
         *  好处: 单独操作父路径和子路径
         */
    public static void function_1(){
        File file = new File("d:","eclipse");
        System.out.println(file);
    }
}

5.File类创建文件功能

  • 创建文件 如果存在这样的文件,就不创建了public boolean createNewFile()
  • 实例代码
public class FileDemo2 {
  public static void main(String[] args)throws IOException {
      function();
  }                     
  /*
         *  File创建文件的功能
         *  boolean createNewFile()
         *  创建的文件路径和文件名,在File构造方法中给出
         *  文件已经存在了,不在创建
         */
  public static void function()throws IOException{
      File file = new File("c:\\a.txt");
      boolean b = file.createNewFile();
      System.out.println(b);
  }
}

6.File创建目录功能

  • public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
  • public boolean mkdirs():创建多层文件夹,如果父文件夹不存在,会帮你创建出来
  • 实例代码
public class FileDemo2 {
  public static void main(String[] args)throws IOException {
      function_1();
  }
  /*
             *  File创建文件夹功能
             *  boolean mkdirs() 创建多层文件夹
             *  创建的路径也在File构造方法中给出
             *  文件夹已经存在了,不在创建
             */
  public static void function_1(){
      File file = new File("c:\abc");
      boolean b = file.mkdirs();
      System.out.println(b);
  }             
}

7.File类删除功能

  • public boolean delete():删除文件或者文件夹,不走回收站,直接从硬盘删除
  • 实例代码
public class FileDemo2 {
  public static void main(String[] args)throws IOException {
      function_2();
  }
  /*
         *  File类的删除功能
         *  boolean delete()
         *  删除的文件或者是文件夹,在File构造方法中给出
         *  删除成功返回true,删除失败返回false
         *  删除方法,不走回收站,直接从硬盘中删除
         *  删除有风险,运行需谨慎
         */
  public static void function_2(){
      File file = new File("c:\a.txt");
      boolean b = file.delete();
      System.out.println(b);
  }         
}

8.File类获取功能

  • String getName(): 返回路径中表示的文件或者文件夹名,获取路径中的最后部分的名字(不论存不存在路径,都会取到)
  • String getPath():获取完整路径
  • long length(): 返回路径中表示的文件的字节数
  • String getAbsolutePath(): 获取绝对路径,返回String对象
  • File getAbsoluteFile() : 获取绝对路径,返回File对象
  • String getParent(): 获取父路径,返回String对象
  • File getParentFile(): 获取父路径,返回File对象
  • 实例代码
public class FileDemo3 {
  public static void main(String[] args) {
      function();
  }
  /*
         * File类的获取功能
         * String getParent() 返回String对象
         * File getParentFile()返回File对象
         * 获取父路径
         */
  public static void function_3(){
      File file = new File("/Users/wangzhe");
      File parent = file.getParentFile();
      System.out.println(parent);///Users
  }

  /*
         * File类获取功能
         * String getAbsolutePath() 返回String对象
         * File   getAbsoluteFile() 返回File对象
         * 获取绝对路径
         * eclipse环境中,写的是一个相对路径,绝对位置工程根目录
         */
  public static void function_2(){
      File file = new File("/Users/wangzhe");
      File absolute = file.getAbsoluteFile();
      System.out.println(absolute);///Users/wangzhe
  }

  /*
         * File类获取功能
         * long length()
         * 返回路径中表示的文件的字节数
         */
  public static void function_1(){
      File file = new File("/Users/wangzhe");
      long length = file.length();
      System.out.println(length);//2592
  }

  /*
         *  File类的获取功能
         *  String getName()
         *  返回路径中表示的文件或者文件夹名
         *  获取路径中的最后部分的名字
         */
  public static void function(){
      File file = new File("/Users/wangzhe");
      String name = file.getName();
      System.out.println(name);//wangzhe

      /*String path = file.getPath();
            System.out.println(path);*/
      //        System.out.println(file);
  }
}

9.File类判断功能

  • boolean exists(): 判断File构造方法中封装路径是否存在,存在返回true,不存在返回false
  • boolean isDirectory(): 判断File构造方法中封装的路径是不是文件夹,如果是文件夹,返回true,不是文件返回false
  • boolean isFile(): 判断File构造方法中封装的路径是不是文件,如果是文件,返回true,不是文件返回false
  • 实例代码
public class FileDemo4 {
  public static void main(String[] args) {
      function();
  }
  /*
         *  File判断功能
         *  boolean isDirectory()
         *  判断File构造方法中封装的路径是不是文件夹
         *  如果是文件夹,返回true,不是文件返回false
         *  
         *  boolean isFile()
         *  判断File构造方法中封装的路径是不是文件
         */
  public static void function_1(){
      File file = new File("/Users/wangzhe");
      if(file.exists()){
          boolean b = file.isDirectory();
          System.out.println(b);//true
      }
  }

  /*
         *  File判断功能
         *  boolean exists()
         *  判断File构造方法中封装路径是否存在
         *  存在返回true,不存在返回false
         */
  public static void function(){
      File file = new File("/Users/wangzhe");
      boolean b = file.exists();
      System.out.println(b);//true
  }
}

10.File类list获取功能

  • String[] list():获取到File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录),返回只有名字
  • File[] listFiles():获取到File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录),返回的是目录或者文件的全路径
  • static File[] listRoots(): 获取系统中所有根目录
  • 实例代码
public class FileDemo {
  public static void main(String[] args) {
      function();
  }
  public static void function_2(){
      //获取系统中的所有根目录
      File[] fileArr = File.listRoots();
      for(File f : fileArr){
          System.out.println(f);// /
      }
  }

  /*
             *  File类的获取功能
             *  File[] listFiles()
             *  获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
             *  返回的是目录或者文件的全路径
             */
  public static void function_1(){
      File file = new File("/Users/wangzhe");
      File[] fileArr = file.listFiles();
      for(File f : fileArr){
          System.out.println(f);// /Users/wangzhe下所有文件的全路径
      }
  }

  /*
             *  File类的获取功能
             *  String[] list()
             *  获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
             *  返回只有名字
             */
  public static void function(){
      File file = new File("/Users/wangzhe");
      String[] strArr = file.list();
      System.out.println(strArr.length);
      for(String str : strArr){
          System.out.println(str);// /Users/wangzhe下所有文件的文件名
      }
  }
}

11.文件过滤器

  • 文件过滤器作用:过滤一个目录下的指定扩展名的文件,或者包含某些关键字的文件夹
  • 方法介绍(实现FileFilter接口,重写抽象方法accept())
  • public String[] list(FilenameFilter filter)
  • public File[] listFiles(FileFilter filter)
  • 实例代码
/*
     *  自定义过滤器
     *  实现FileFilter接口,重写抽象方法
     */
public class MyFilter implements FileFilter{
  public boolean accept(File pathname)  {
      /*
             * pathname 接受到的也是文件的全路径
             * c:\\demo\\1.txt
             * 对路径进行判断,如果是java文件,返回true,不是java文件,返回false
             * 文件的后缀结尾是.java
             */
      //String name = pathname.getName();
      return pathname.getName().endsWith(".java");

  }
}

/*
     *  File类的获取,文件获取过滤器
     *  遍历目录的时候,可以根据需要,只获取满足条件的文件
     *  遍历目录方法 listFiles()重载形式
     *  listFiles(FileFilter filter)接口类型
     *  传递FileFilter接口的实现类
     *  自定义FileFilter接口实现类,重写抽象方法,
     *  接口实现类对象传递到遍历方法listFiles
     */
public class FileDemo1 {
  public static void main(String[] args) {
      File file = new File("/Users/wangzhe");
      File[] fileArr = file.listFiles(new MyFilter());
      for(File f : fileArr){
          System.out.println(f);
      }
  }
}
  • 文件过滤器原理
  • listFiles()遍历目录的同时,获取到了文件名全路径,调用过滤器的方法accept,将获取到的路径传递给accept方法的参数pathname
  • accept方法接收了参数pathname,参数是listFiles传递来的
  • 在accept方法中,进行判断,如果这个路径是Java文件,返回true,否则返回false
  • 一旦方法返回了true,listFiles将路径保存到File数组中

javaput函数 java中put_封装

12.递归概念和注意事项

  • 递归概念
  • 递归,指在当前方法内调用自己的这种现象
  • 递归分为两种,直接递归和间接递归
  • 直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法
  • 注意事项
  • 递归一定要有出口, 必须可以让程序停下
  • 递归次数不能过多
  • 构造方法,禁止递归