JavaSE核心API--文件操作类

java.io.File

1)理论讲解:使用File创建一个新文件

代码演示:

    /*
     * 在当前目录下新建一个空白文件test.txt
     */
    File file = new File("./test.txt");
    if (!file.exists()) {// 如果test.txt文件不存在则把它创建出来
        file.createNewFile();// 将File表示的文件创建出来
        System.out.println("文件创建成功!");
    } else {
        System.out.println("文件已存在!");
    }

2)理论讲解:刪除一个空目录

代码演示:

    /*
     * 删除当前目录下的demo目录
     */
    File dir = new File("demo");
    if (dir.exists()) {
        dir.delete();// 删目录的前提是该目录必须是一个空目录
        System.out.println("目录已删除!");
    } else {
        System.out.println("目录不存在!");
    }

3)理论讲解:删除一个文件

代码演示:

    /*
     * 删除当前目录下的test.txt "./"可以忽略不写,默认就是当前目录
     */
    File file = new File("test.txt");
    if (file.exists()) {
        file.delete();
        System.out.println("文件已删除!");
    } else {
        System.out.println("文件不存在!");
    }

4)理论讲解:文件流

java.io.File
File用于表示文件系统的一个文件或目录
使用File可以:
1.访问其表示的文件或目录的属性信息(名字,大小等)
2.创建,删除文件或目录
3.访问目录子项

但是不能访问文件数据

代码演示:

    /*
     * 创建File是要指定路径,使其表示该路径下的文件或目录 
     * 这里路径通常使用相对路径,相对路径虽然不能准确描述位置,但是是根据运行环境而定的
     * 这样做的好处是跨平台可以使用
     * 
     * "./"指的是当前目录,在eclipse下运行java程序时,当前目录的位置为该程序所在项目的项目目录
     */
    File file = new File("./demo.txt");

    String name = file.getName();
    System.out.println(name);

    long length = file.length();
    System.out.println("len:" + length);

    String str = file.toString();
    System.out.println(str);

    boolean cr = file.canRead();
    boolean cw = file.canWrite();
    System.out.println("可读:" + cr);
    System.out.println("可写:" + cw);

5)理论讲解:获取一个目录中的所有子项

代码演示:

    /*
     * 获取当前目录中的所有子项
     */
    File dir = new File("a/b");
    /*
     * boolean isDirectory() 
     * 判断当前File对象是否为一个目录 
     * boolean isFile() 
     * 判断当前File对象是否为一个文件
     */
    if (dir.isDirectory()) {
        File[] subs = dir.listFiles();
        System.out.println(subs.length);
        for (int i = 0; i < subs.length; i++) {
            System.out.println(subs[i].getName());
        }
    }

6)理论讲解:listFiles的重载方法

listFiles有一个重载方法,允许我们传入一个参数
该参数为一个文件过滤器,那么该方法会将目录中满足过滤器要求的子项返回

代码演示:

public class ListFilesDemo {

   public static void main(String[] args) {
        /*
        * 获取当前目录中名字以"."开头的子项
        */
//      File dir = new File(".");

//      File[] subs = dir.listFiles();

//      MyFilter filter = new MyFilter();
//      File[] subs = dir.listFiles(filter);// 只用一次,使用匿名内部类创建对象

//      //匿名内部类
//      FileFilter filter = new FileFilter() {
//          @Override
//          public boolean accept(File file) {// 重写accept方法进行判断
//              String name = file.getName();
//              return name.startsWith(".");
//          }
//      };
//      File[] subs = dir.listFiles(filter);// 此处调用了listFiles的重载方法,参数filter需要用匿名内部类创建对象(只创建一次)

        /*
        * 将目录中的每个子项都通过调用给定过滤器的accept方法进行判断,将返回为true的子项保留并以数组形式返回
        */
        File[] subs = new File(".").listFiles(new FileFilter() {
           @Override
           public boolean accept(File file) {
                return file.getName().startsWith(".");// 以"."开头的文件
           }
        });

        System.out.println(subs.length);
        for (int i = 0; i < subs.length; i++) {
           System.out.println(subs[i].getName());
        }

   }
}

//class MyFilter implements FileFilter{// 文件过滤器是一个接口
//  public boolean accept(File file) {
//      String name = file.getName();// 获取该文件的文件名
//      System.out.println("正在过滤"+name);// 打桩
//      return name.startsWith(".");// 获取以.开头命名的文件
//  }
//}

7)理论讲解:创建一个空目录(空白文件夹)

代码演示:

    /*
     * 在当前目录下新建一个目录:demo
     */
    File dir = new File("demo");
    if (!dir.exists()) {
        // 创建该目录
        dir.mkdir();
        System.out.println("目录已创建!");
    } else {
        System.out.println("目录已存在!");
    }

8)理论讲解:创建一个多级目录

代码演示:

    /*
     * 在当前目录下新建目录: 
     * ./a/b/c/d/e/f
     */
    File dir = new File("a/b/c/d/e/f");
    if (!dir.exists()) {
        dir.mkdirs();
        System.out.println("目录已创建!");
    } else {
        System.out.println("目录已存在!");
    }

9)小练习:完成方法,删除指定的File表示的文件或目录

拓展:

1.编写一段代码完成1+2+3+4+...+100,并输出结果。 在这段代码中不得出现for,while关键字

2.买汽水,1块钱1瓶汽水,2个空瓶可以换1瓶汽水,3个瓶盖可以换1瓶汽水,问:20块钱可以买到多少瓶汽水?113

代码演示:

public class Test {
   public static void main(String[] args) {
        delete(new File("a"));
   }
   /** 首先要判断file是否为一个目录,若是目录则需要先将该目录中的所有子项全部删除后才可以将其删除,若是文件则可以直接删除 */
   public static void delete(File file) {
        if (file.isDirectory()) {// 如果它是目录
           /** 先将该目录清空 */
           File[] subs = file.listFiles();// 1.先获取该目录的所有子项
           for (int i = 0; i < subs.length; i++) {// 2.将子项逐一删除
                File sub = subs[i];// 获取每一个子项
                delete(sub);// 递归调用(发现整个方法又要重新来一遍,方法复用即可)
           }
        }
        file.delete();// 如果它不是目录
   }
}