Skip to content

Java

File类使用

  • File对象表示一个路径(D:\\abc.txt), 可以是文件也可以是目录(文件夹)路径.
  • File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,但并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。

File类的构造方法

构造方法作用
File(String pathname)通过给定的路径名字符串创建新的File实例。
File(String parent, String child)通过给定的父路径名字符串子路径名字符串来创建新的File实例。
File(File parent, String child)通过给定的父路径实例和子路径名字符串来创建新的File实例。
java
import java.io.File;

public class Demo1 {
    public static void main(String[] args) {
        //相对路径
        File f1 = new File("a.txt");
        System.out.println(f1);//a.txt
        //绝对路径
        File f2 = new File("D:\\Java\\JAVA学习\\java_study\\day22-code\\a.txt");
        System.out.println(f2);//D:\Java\JAVA学习\java_study\day22-code\a.txt

        File f3 = new File("D:\\Java\\JAVA学习\\java_study\\day22-code", "a.txt");
        System.out.println(f3);//D:\Java\JAVA学习\java_study\day22-code\a.txt

        File f4 = new File("D:\\Java\\JAVA学习\\java_study\\day22-code");
        File f5 = new File(f4, "a.txt");
        System.out.println(f5);// D:\Java\JAVA学习\java_study\day22-code\a.txt
    }
}

判断和获取

方法作用
public boolean isDirectory()判断File是否为文件夹(目录)
public boolean isFile()判断File是否为文件
public boolean exists()判断File文件是否存在
public long length()返回File表示的文件的长度(字节数量)
public String getAbsolutePath()返回File的绝对路径
public String getPath()返回定义File对象时使用的路径
public String getName()返回File文件或目录的名称
public long lastModified()返回File最后一次被修改的时间(时间毫秒值)
java
import java.io.File;

public class Demo2 {
    public static void main(String[] args) {
        File file = new File("day22-code\\a.txt");
        //判断File是否为文件夹(目录)
        System.out.println(file.isDirectory());// false
        //判断File是否为文件
        System.out.println(file.isFile());// true
        //判断File是否为文件是否存在
        System.out.println(file.exists());// true
        //a.txt: 111 返回文件的长度
        System.out.println(file.length());// 3
        // 返回File的绝对路径
        System.out.println(file.getAbsolutePath());// D:\Java\JAVA学习\java_study\day22-code\a.txt
        // 返回定义`File`对象时使用的路径, 即: File创建对象时, 括号里的内容是啥, 这里就返回啥
        System.out.println(file.getPath());// day22-code\a.txt
        //返回文件或目录的名称
        System.out.println(file.getName());// a.txt
        // 返回`File`最后一次被修改的时间(时间毫秒值)
        System.out.println(file.lastModified());// 返回时间毫秒值
    }
}

创建和删除

方法作用
public boolean createNewFile()创建一个空文件
public boolean mkdir()创建单极文件夹, 如果文件存在返回false
public boolean mkdirs()创建多级文件夹, 如果文件存在返回false
public boolean delete()删除文件或目录, 如果文件或目录不存在, 则返回false, 如果是目录, 则必须为空才能删除, 否则返回false
java
public class Demo3 {
    public static void main(String[] args) throws IOException {
        /*
        * createNewFile的细节
        如果当前路径表示文件不存在, 则创建文件并返回true
        如果当前路径表示文件存在, 则返回false
        如果父级路径不存在, 那么方法会抛出异常IOException'
        * */
    //    File file1 = new File("day22-code\\bbb\\b.txt");
    //     此时bbb文件夹并不存在, 抛出异常IOException
    //    System.out.println(file1.createNewFile());
        //创建单极目录ccc
        File file2 = new File("day22-code\\ccc");
        System.out.println(file2.mkdir());
        //创建多极目录ccc/ddd, 如果使用mkdir则会创建失败
        File file3 = new File("day22-code\\ccc\\ddd");
        System.out.println(file3.mkdirs());

        File file4 = new File("day22-code\\a.txt");
        System.out.println(file4.delete());
    }
}

提示

  1. delete方法只能删除文件和空文件夹, delete方法直接删除不走回收站
  2. createNewFile的细节
    1. 如果当前路径表示文件不存在, 则创建文件并返回true
    2. 如果当前路径表示文件存在, 则返回false
    3. 如果父级路径不存在, 那么方法会抛出异常IOException
  3. mkdir只能创建单极文件夹, 创建多级会失败返回false; mkdirs即能创建单极又可以创建多极文件夹

获取并遍历

方法名称说明
public File[] listFiles()返回一个File数组, 数组元素为当前路径下的所有子文件和子文件夹(包括隐藏文件)
public File[] listFiles(FileFilter filter)在上述功能下, 添加了过滤功能
public String[] list()返回一个字符串数组, 数组元素为当前路径下的所有子文件和子文件夹的名称
public String[] list(FilenameFilter filter)在上述功能下, 添加了过滤功能
java
import java.io.File;
import java.util.Arrays;

public class Demo4 {
    public static void main(String[] args) {
        // aaa\\bbb
        File file = new File("day22-code\\aaa");
        File[] files = file.listFiles();
        System.out.println(Arrays.toString(files));//[day22-code\aaa\bbb]
        System.out.println("-----------------------------------");
        File file2 = new File("day22-code\\aaa");
        String[] list = file2.list();
        for (String s : list) {
            //最终输出: bbb
            System.out.println(s);
        }
        System.out.println("-----------------------------------");
        File file3 = new File("day22-code\\ddd");
        String[] list1 = file3.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //过滤白名单的内容
                String[] whiteList = {"img", "asset"};
                for (String s : whiteList) {
                    if (s.equals(name)) return false;
                }
                //返回true, 表示要保留; 否则返回false
                return true;
            }
        });

        for (String s : list1) {
            //最终输出: bbb
            System.out.println(s);
        }
    }
}

提示

  1. 当调用者FIle表示的路径不存在时, 返回null
  2. 当调用者FIle表示的路径是文件时, 返回null
  3. 当调用者File表示的路径是空文件夹时, 返回空数组
  4. 如果有内容, 会将所以文件和文件夹路径放在File数组中(包括隐藏文件)
  5. 路径如果有权限问题, 那么listFiles可能会返回null

Released under the MIT License.