Tips:样式蚂蚁森林浇水get

File、递归

File类

概述

  1、概述

  java.IO.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

  我们可以使用File类的方法

  创建文件/文件夹

  删除文件/文件夹

  判断文件/文件是否存在

  对文件夹进行遍历

  获取文件大小

  2、注意

  File类是一个与操作系统无关的类,任何操作系统都可以用这个类中的方法

  3、重点:记住三个单词

  file、director、path

File类的静态成员变量

  

 

 

   1、与系统相关的路径分隔符

package day08;

import java.io.File;

public class demo07 {
    public static void main(String[] args) {
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator);//路径分隔符 windows:分号 Linux:冒号
    }
}
File.pathSeparator;
package day08;

import java.io.File;

public class demo07 {
    public static void main(String[] args) {
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator);//路径分隔符 windows:分号 Linux:冒号
        char pathSeparatorChar = File.pathSeparatorChar;
        System.out.println(pathSeparatorChar);
        /**
         *  ;
         *  ;
         */
    }
}
File.pathSeparatorChar

  路径分隔符:windows ";",linux ":"

  2、与系统相关的默认文件分隔符

package day08;

import java.io.File;

public class demo07 {
    public static void main(String[] args) {
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator);//路径分隔符 windows:分号 Linux:冒号
        char pathSeparatorChar = File.pathSeparatorChar;
        System.out.println(pathSeparatorChar);
        /**
         *  ;
         *  ;
         */
        String separator = File.separator;
        System.out.println(separator);//文件名称分隔符 windos:反斜杠\ Linux:/
        char separatorChar = File.separatorChar;
        System.out.println(separatorChar);
    }
}
File.separator & File.separatorChar

  文件名称分隔符: windos:反斜杠\ Linux:/

绝对路径&相对路径

  1、绝对路径

  绝对路径:指的是一个完整的路径,以盘符开始的路径

    C:\Users\YIAN\Desktop\File\task.txt

  2、相对路径

  相对路径:是一个简化的路径

  相对指的是相对于当前项目的根目录(D:\IdeaProjects\JinJie\src\day08\demo07.java)

  如果使用当前项目的根目录,路径可以简写

  例如:

  C:\Users\YIAN\Desktop\File\task.txt

  简写:

  task.txt

  3、注意

  1.路径不区分大小写

  2.路径中的文件名称分隔符windows使用反斜杠/反斜杠是转义字符,所以在java中两个反斜杠,代表一个普通斜杠//

构造方法  

  public File(String pathname);

  通过给定的路径名字符串 转换为 抽象路径名来创建新的File实例

package day08.day08_1;

import java.io.File;

public class day08_1 {
    public static void main(String[] args) {
        show("C:\\Users\\YIAN\\Desktop\\File\\a.txt");
    }
    public static void show(String pathname){
        File file = new File(pathname);
        System.out.println(file);
        // 返回 C:\Users\YIAN\Desktop\File\a.txt
    }
}
new File(pathname);

 

  参数:

  String pathname:字符串路径名称

  路径可以以文件结尾,也可以是以文件夹结尾 

package day08.day08_1;

import java.io.File;

public class day08_1 {
    public static void main(String[] args) {
        //以文件夹结尾
        show("C:\\Users\\YIAN\\Desktop\\File\\Dircetory");
        //以文件结尾
        show("C:\\Users\\YIAN\\Desktop\\File\\a.txt");
    }

    public static void show(String pathname){
        File file = new File(pathname);
        System.out.println(file);
    }
}
文件 & 文件夹结尾

 

  路径可以是绝对路径,也可以是相对路径

package day08.day08_1;

import java.io.File;

public class day08_1 {
    public static void main(String[] args) {
        //使用绝对路径
        show("C:\\Users\\YIAN\\Desktop\\File\\Dircetory");//C:\Users\YIAN\Desktop\File\Dircetory
        //使用相对路径
        show("a.txt");//a.txt

    }

    public static void show(String pathname){
        File file = new File(pathname);
        System.out.println(file);
    }
}
绝对路径 & 相对路径

 

  注意:

  创建File对象,只是把字符串路径封装为File对象(不会判断实例文件是否真的存在),不考虑路径的真假情况

 public File(String parent,String child)

  从父路径名字字符串子路径字符串创建新的File实例

package day08.day08_1;

import java.io.File;

public class day08_02 {
    //public File(String parent,String child)
    public static void main(String[] args) {
        //给定 父路径 子路径
        methodB("C:\\Users\\YIAN\\Desktop\\File","task.txt");
    }
    public static void methodB(String parent,String child){
        File file = new File(parent,child);
        System.out.println(file);
        //返回 C:\Users\YIAN\Desktop\File\task.txt
    }
}
new File(String parent,String child)

 

  参数:把文件分成了两部分

  String parent:父路径

  String child:子路径

  好处:

  父路径和子路径可以单独写,使用起来灵活;父子路径都可以变化

package day08.day08_1;

import java.io.File;

public class day08_02 {
    //public File(String parent,String child)
    public static void main(String[] args) {
        //给定 父路径 子路径
        methodB("C:\\Users\\YIAN\\Desktop\\File","task.txt");
        //返回 C:\Users\YIAN\Desktop\File\task.txt

        methodB("d:\\","a.txt");
        //返回 d:\a.txt
    }
    public static void methodB(String parent,String child){
        File file = new File(parent,child);
        System.out.println(file);
    }
}
灵活性展示  

  public File(File parent,String child)

  从父抽象路径名子路径名字符串创建新的File实例

package day08.day08_1;

import java.io.File;

public class day08_03 {
    public static void main(String[] args) {
        //创建File对象
        File parent = new File("d:\\");
        methodC(parent,"a.txt");
        //返回 d:\a.txt
    }
    public static void methodC(File parent, String child){
        File file = new File(parent,child);
        System.out.println(file);
    }
}
new File(File parent, String child);

  参数:把文件分成了两部分

  File parent:父路径

  String child:子路径

  好处:

  父路径和子路径可以单独写,使用起来灵活;父子路径都可以变化

  父路径是File类,可以使用File的方法对路径进行一些操作,再使用路径创建对象

常用方法---获取功能的方法

  public String getAbsolutePath();

  返回此File的绝对路径

package day08.day08_2;

import java.io.File;

public class demo01 {
    //getAbsolutePath() 返回File路径
    public static void main(String[] args) {
        //绝对路径
        File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\a.text");
        //相对路径
        File f2 = new File("b.text");
        String absolutePath1 = f1.getAbsolutePath();
        System.out.println(absolutePath1);
        //C:\Users\YIAN\Desktop\File\a.text

        String absolutePath2 = f2.getAbsolutePath();
        System.out.println(absolutePath2);
        //D:\IdeaProjects\JinJie\b.text
    }
}
.getAbsolutePath()

 

  注意:无论File实例是绝对路径还是相对路径 返回的都是绝对路径

  public String getPath();

  将此File转换为路径名字符串

package day08.day08_2;

import java.io.File;

public class demo02 {
    public static void main(String[] args) {
        File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\a.text");
        String path = f1.getPath();
        System.out.println(path);
        //C:\Users\YIAN\Desktop\File\a.text

        File f2 = new File("a.text");
        String path1 = f2.getPath();
        System.out.println(path1);
        //a.text
    }
}
.getPath();

 

  绝对路径返回绝对路径名字符串

  相对路径返回相对路径名字符串

  public String getName();

  返回由此File表示的文件文件夹名称。

package day08.day08_2;

import java.io.File;

public class demo03 {
    public static void main(String[] args) {
        File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\a.txt");
        String name1 = f1.getName();
        System.out.println(name1);
        //返回文件夹名 a.txt

        File f2 = new File("b.txt");
        String name2 = f2.getName();
        System.out.println(name2);
        //返回文件名 b.txt

        File f3 = new File("C:\\Users\\YIAN\\Desktop\\File");
        String name3 = f3.getName();
        System.out.println(name3);
        //返回文件夹名 File
    }
}
.getName()

 

  public long length();

  返回由此File表示的文件的长度(大小 字节为单位)

  注意:

  1.文件夹是没有大小概念的,不能获取文件夹大小

  2.如果构造方法给出的路径不存在,那么length方法返回0

package day08.day08_2;

import java.io.File;

public class demo04 {
    public static void main(String[] args) {
        //真实存在的文件
        File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\task.txt");
        long length1 = f1.length();
        System.out.println(length1);//返回 9 字节

        //不存在的文件
        File f2 = new File("C:\\Users\\YIAN\\Desktop\\File\\b.jpg");
        long length2 = f2.length();
        System.out.println(length2);//返回 0字节

        //测试获取文件大小
        File f3 = new File("C:\\Users\\YIAN\\Desktop\\File");
        long length3 = f3.length();
        System.out.println(length3);// 返回 0字节

    }
}
.length();

 

常用方法---判断功能的方法

  public boolean exists();

  此File表示的文件目录是否实际存在

package day08.day08_2;

import java.io.File;

public class demo05 {
    public static void main(String[] args) {
        File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\");
        System.out.println(f1.exists());//存在此文件夹 true

        File f2 = new File("C:\\Users\\YIAN\\Desktop\\File\\a.txt");
        System.out.println(f2.exists());//不存在此文件 false

        //相对路径
        File f3 = new File("JinJie.iml");
        System.out.println(f3.exists());//存在此文件 true
    }
}
.exsits()

 

  public boolean isDirectory()

  此File表示的是否为目录(判断此目录是否存在)

  public Boolean isFile()

  此File表示的是否为文件(判断此文件是否存在)

package day08.day08_2;

import java.io.File;

public class demo06 {
    public static void main(String[] args) {
        File f1 = new File("C:\\Users\\YIAN\\Desktop\\File\\");
        File f2 = new File("JinJie.iml");
        File f3 = new File("C:\\Users\\YIAN\\Desktop\\File\\test.txt");

        //先判断文件是不是存在
        if(f1.exists()){
            //判断是否为文件夹
            System.out.println(f1.isDirectory()); //true
            //判断是否为文件
            System.out.println(f1.isFile()); //false
        }
        if(f2.exists()){
            //判断是否为文件夹
            System.out.println(f2.isDirectory()); //false
            //判断是否为文件
            System.out.println(f2.isFile()); //true
        }
        //文件不存在 不进行if 中的代码
        if(f3.exists()){
            //判断是否为文件夹
            System.out.println(f3.isDirectory()); //true
            //判断是否为文件
            System.out.println(f3.isFile()); //false
        }

    }
}
isDirectory || isFile

常用方法---创建删除功能的方法

  public boolean creatNewFile();

  当且仅当具有该名称的文件尚不存在,创建一个新的空文件(当前文件夹没有,才能创建)

  返回值:布尔值

  true:文件不存在,创建文件,返回true

package day08.day08_2;

import java.io.File;
import java.io.IOException;

public class demo07 {
    public static void main(String[] args) {
        //在 C:\Users\YIAN\Desktop\File\ 文件目录下 创建1.txt
        File file = new File("C:\\Users\\YIAN\\Desktop\\File\\","1.txt");
        try {
            boolean newFile = file.createNewFile();
            System.out.println(newFile); //true 创建成功
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
.creatNewFile()

 

  false:文件存在,不会创建,返回false

package day08.day08_2;

import java.io.File;
import java.io.IOException;

public class demo07 {
    public static void main(String[] args) {
        //再次 在 C:\Users\YIAN\Desktop\File\ 文件目录下 创建1.txt
        File file = new File("C:\\Users\\YIAN\\Desktop\\File\\","1.txt");
        try {
            boolean newFile = file.createNewFile();
            System.out.println(newFile); //false 创建失败
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
再次创建1.txt

 

  注意:

  1、此方法只能创建文件,不能创建文件夹

package day08.day08_2;

import java.io.File;
import java.io.IOException;

public class demo08 {
    public static void main(String[] args) {
        //通过creatNewFile创建文件夹
        File file = new File("C:\\Users\\YIAN\\Desktop\\File\\","directory");
        try {
            boolean newFile = file.createNewFile();
            System.out.println(newFile);//true 这里返回true 实际上创建成功的还是文件 没有后缀名的文件
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
.creatNewFile()

 

  2、创建文件的路径必须存在否则会抛出异常

  public boolean mkdir();

  创建由此File表示的目录(单级文件夹

package day08.day08_2;

import java.io.File;
import java.io.IOException;

public class day09 {
    public static void main(String[] args) throws IOException {
        File file = new File("C:\\Users\\YIAN\\Desktop\\File\\file1");
        boolean mkdir = file.mkdir();
        System.out.println(mkdir);//true
    }
}
.mkdir()

 

  注意:必须确保创建的文件夹不存在 才能创建

  public boolean mkdirs();

  创建由此File表示的单级/多级文件夹

package day08.day08_2;

import java.io.File;

public class demo10 {
    public static void main(String[] args) {
        //创建单级文件夹
        File file = new File("C:\\Users\\YIAN\\Desktop\\File1");
        boolean mkdirs = file.mkdirs();
        System.out.println(mkdirs);//true
    }
}
.mkdirs() 创建单级文件夹

 

package day08.day08_2;

import java.io.File;

public class demo10 {
    public static void main(String[] args) {
        //创建单级文件夹
        File file = new File("C:\\Users\\YIAN\\Desktop\\File2\\file2_1\\file2_1_1");
        boolean mkdirs = file.mkdirs();
        System.out.println(mkdirs);//true
    }
}
.mkdirs() 创建多级文件夹

 

  public boolean delete();

  此方法可以删除构造方法路径给出的文件/文件夹

  返回值:布尔值

  true:文件/文件夹删除成功,返回true

  false:文件夹中有内容,不会删除返回false;构造方法中的路径不存在返回false

  注意:

  delete方法是直接在硬盘删除文件/文件夹,不走回收站

package day08.day08_2;

import java.io.File;
import java.io.IOException;

public class demo10 {
    public static void main(String[] args) throws IOException {
        //创建单级文件夹
        File file = new File("C:\\Users\\YIAN\\Desktop\\File\\file1_1");
        //创建文件夹
        if(file.mkdirs()==true){
            System.out.println("文件夹创建成功");
        }
        //创建文件
        File direct = new File(file, "1.txt");
        boolean newFile = direct.createNewFile();
        if(newFile == true){
            System.out.println("文件创建成功");
        }
        //删除文件
        boolean del = direct.delete();
        if(del ==true){
            System.out.println("指定路径文件已删除");
        }
        //删除文件夹
        boolean delF = file.delete();
        if(delF==true){
            System.out.println("文件夹删除成功");
        }


    }
}
.delete()

目录的遍历

  public String[] list() 返回一个String数组,表示该File目录中的所有子文件或目录。(返回文件夹/文件名)

package day08.day08_2;

import java.io.File;
import java.io.IOException;

public class demo10 {
    public static void main(String[] args) throws IOException {
        //创建单级文件夹
        File file = new File("C:\\Users\\YIAN\\Desktop\\File");
        //遍历文件目录
        for (String list:file.list()
             ) {
            System.out.println(list);
        }
        /**
         * 1.txt
         * directory
         * file1_1
         * task.txt
         */
    }
}
.list()--->返回字符串类型数组

  public File[] listFiles() 返回一个File数组,表示该File目录中的所有的子文件或目录。(返回带绝对路径的File)

package day08.day08_2;

import java.io.File;
import java.io.IOException;

public class demo10 {
    public static void main(String[] args) throws IOException {
        //创建单级文件夹
        File file = new File("C:\\Users\\YIAN\\Desktop\\File");
        //遍历文件目录 返回File数组
        File[] files = file.listFiles();

        for (File f:files
             ) {
            System.out.println(f);
        }
        /**
         * C:\Users\YIAN\Desktop\File\1.txt
         * C:\Users\YIAN\Desktop\File\directory
         * C:\Users\YIAN\Desktop\File\file1_1
         * C:\Users\YIAN\Desktop\File\task.txt
         */
    }
}
listFiles()--->返回File类数组

 

   注意:

   1.list方法和listFiles方法遍历的是构造方法给出的目录

   2.如果构造方法中给出的目录不存在,会抛出空指针异常

   3.如果构造方法给出的路径不是一个目录,也会抛出空指针异常

posted @ 2021-03-29 19:36  心岛未晴  阅读(58)  评论(0)    收藏  举报