Java—File类

File类

介绍

java.io.File类

  • 文件和目录路径名(文件夹)的抽象表示形式。
  • 我们可以使用File类对文件和文件夹进行操作

静态成员变量

名称解释
static String pathSeparator与系统有关的路径分隔符,为了方便,它被表示为一个字符串
static char pathSeparatorChar与系统有关的路径分隔符
static String separator与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串
static char separatorChar与系统有关的默认名称分隔符

注意:

  1. 路径分隔符 windows:分号; linux:冒号:
  2. 文件名称分隔符 windows:反斜杠\ linux:正斜杠/
import java.io.File;
public class Demo01File {
    public static void main(String[] args) {
        // pathSeparatorChar和pathSeparator其实一样,就是一个是字符,一个是字符串
        System.out.println(File.pathSeparator); // 路径分隔符 windows:分号; linux:冒号:

        // separatorChar和separator其实一样,就是一个是字符,一个是字符串
        System.out.println(File.separator); // 文件名称分隔符 windows:反斜杠\ linux:正斜杠/
    }
}

输出结果:

;
\

构造方法

File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

相关知识补充:
路径分2种,绝对路径相对路径
绝对路径:一个完整的路径,从盘符(C:,D:)开始
举例:
C:\a.txt
E:\Coding\Java\java-study2\a.txt

相对路径:相对于当前项目的根目录(E:\Coding\Java\java-study2)
举例:
E:\Coding\Java\java-study2\a.txt,用相对路径可以简化成 a.txt(省略项目的根目录)

注意:

  1. 路径不区分大小写
  2. 路径中的文件名称分隔符在windows中用反斜杠,反斜杠是转义字符,两个反斜杠代表一个反斜杠
import java.io.File;
public class Demo02File {
    public static void main(String[] args) {
        show1();
        show2();
        show3();
    }

    /**
     * File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
     * String pathname:路径名称
     *
     * 路径可以是文件或者文件夹
     * 路径可以是绝对路径或者相对路径
     * 路径可以是真实存在或者不存在
     */
    private static void show1() {
        // 绝对路径和文件
        File file1 = new File("C:\\a.txt");
        System.out.println(file1); // C:\a.txt

        // 绝对路径和文件夹
        File file2 = new File("C:\\java\\a");
        System.out.println(file2); // C:\java\a

        // 相对路径文件
        File file3 = new File("a.txt");
        System.out.println(file3); // a.txt
    }

    /**
     * File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
     * String parent:父路径名称
     * String child:子路径名称
     * 优点:
     *      父子路径都可以更改,使用更灵活
     */
    private static void show2() {
        File file = new File("C:\\","a.txt");
        System.out.println(file); // C:\a.txt
    }

    /**
     * File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
     * File parent:File类对象的父路径
     * String child:字符串子路径
     * 优点:
     *     子路径都可以更改,使用更灵活
     */
    private static void show3() {
        File parent = new File("C:\\");
        File file = new File(parent,"a.txt");
        System.out.println(file); // C:\a.txt
    }
}

获取功能的方法

Public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。

Public String getPath() 将此抽象路径名转换为一个路径名字符串。

Public String getName() 返回由此抽象路径名表示的文件或目录的名称。

public long length()返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。

import java.io.File;
public class Demo03File {
    public static void main(String[] args) {
        show1();
        show2();
        show3();
        show4();
    }
    
    /**
     * Public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
     * 无论构造方法传入的是绝对路径还是相对路径,该方法返回的都是绝对路径
     */
    private static void show1() {
        File file1 = new File("E:\\Coding\\Java\\java-study2\\a.txt");
        System.out.println(file1.getAbsolutePath()); // E:\Coding\Java\java-study2\a.txt

        File file2 = new File("a.txt");
        System.out.println(file2.getAbsolutePath()); // E:\Coding\Java\java-study2\a.txt
    }

    /**
     *  Public String getPath() 将此抽象路径名转换为一个路径名字符串。
     *  构造方法传入相对路径则返回相对路径,反之则绝对路径
     *
     *  toString()实际上调用的是getPath()方法
     *  源码:
     *  public String toString() {
     *         return getPath();
     *  }
     */
    private static void show2() {
        File file1 = new File("E:\\Coding\\Java\\java-study2\\a.txt");
        System.out.println(file1.getPath()); // E:\Coding\Java\java-study2\a.txt

        File file2 = new File("a.txt");
        System.out.println(file2.getPath()); // a.txt

        System.out.println(file1); // E:\Coding\Java\java-study2\a.txt
        System.out.println(file1.toString()); // E:\Coding\Java\java-study2\a.txt

    }

    /**
     *  Public String getName() 返回由此抽象路径名表示的文件或目录的名称,即获取结尾部分(文件或文件夹)
     *
     */
    private static void show3() {
        File file1 = new File("E:\\Coding\\Java\\java-study2\\a.txt");
        System.out.println(file1.getName()); // a.txt

        File file2 = new File("E:\\Coding\\Java\\java-study2");
        System.out.println(file2.getName()); // java-study2
    }

    /**
     * public long length()返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。
     * 获取指定的文件大小,单位是字节
     * 注意:
     *      文件夹是没有大小概念的
     *      给定路径不存在,会返回0
     */
    private static void show4() {
        // 文件夹
        File file1 = new File("E:\\Coding\\Java\\java-study2");
        System.out.println(file1.length()); // 4096 windows系统中文件夹默认4096字节,该大小可以自定义,不同操作系统默认大小可能不同。

        // 真实存在的文件
        File file2 = new File("E:\\Coding\\Java\\java-study2\\a.txt");
        System.out.println(file2.length()); // 14
        
        // 不存在的文件
        File file3 = new File("E:\\Coding\\Java\\java-study2\\b.txt");
        System.out.println(file3.length()); // 0
    }
}

判断功能的方法

boolean exists() 判断此抽象路径名表示的文件或目录是否存在。

boolean isFile() 判断此抽象路径名表示的文件是否是一个标准文件。不存在的路径则返回false。

boolean isDirectory() 判断此抽象路径名表示的文件是否是一个目录。不存在的路径则返回false。

import java.io.File;
public class Demo04File {
    public static void main(String[] args) {
        /**
         *  boolean exists() 判断此抽象路径名表示的文件或目录是否存在。
         *
         *  boolean isDirectory() 判断此抽象路径名表示的文件是否是一个目录。
         *  不存在的路径则返回false
         *
         *  boolean isFile() 判断此抽象路径名表示的文件是否是一个标准文件。
         *  不存在的路径则返回false
         */

        // 真实存在的文件
        File file1 = new File("E:\\Coding\\Java\\java-study2\\a.txt");
        // 真实存在的文件夹
        File file2 = new File("E:\\Coding\\Java\\java-study2");
        // 不存在的文件
        File file3 = new File("E:\\Coding\\Java\\java-study2\\b.txt");
        // 不存在的文件夹
        File file4 = new File("E:\\Coding\\Java\\java-study3");

        // 判断是否存在
        System.out.println("E:\\Coding\\Java\\java-study2\\a.txt 是否存在:" + file1.exists());
        System.out.println("E:\\Coding\\Java\\java-study2 是否存在:" + file2.exists());
        System.out.println("E:\\Coding\\Java\\java-study2\\b.txt 是否存在:" + file3.exists());
        System.out.println("E:\\Coding\\Java\\java-study3 是否存在:" + file4.exists());

        // 判断是不是文件
        System.out.println("E:\\Coding\\Java\\java-study2\\a.txt 是文件吗?:" + file1.isFile());
        System.out.println("E:\\Coding\\Java\\java-study2 是文件吗?:" + file2.isFile());
        System.out.println("E:\\Coding\\Java\\java-study2\\b.txt 是文件吗?:" + file3.isFile());
        System.out.println("E:\\Coding\\Java\\java-study3 是文件吗?:" + file4.isFile());

        // 判断是不是文件夹
        System.out.println("E:\\Coding\\Java\\java-study2\\a.txt 是文件夹吗?:" + file1.isDirectory());
        System.out.println("E:\\Coding\\Java\\java-study2 是文件夹吗?:" + file2.isDirectory());
        System.out.println("E:\\Coding\\Java\\java-study2\\b.txt 是文件夹吗?:" + file3.isDirectory());
        System.out.println("E:\\Coding\\Java\\java-study3 是文件夹吗?:" + file4.isDirectory());
    }
}

输出结果:

E:\Coding\Java\java-study2\a.txt 是否存在:true
E:\Coding\Java\java-study2 是否存在:true
E:\Coding\Java\java-study2\b.txt 是否存在:false
E:\Coding\Java\java-study3 是否存在:false
E:\Coding\Java\java-study2\a.txt 是文件吗?:true
E:\Coding\Java\java-study2 是文件吗?:false
E:\Coding\Java\java-study2\b.txt 是文件吗?:false
E:\Coding\Java\java-study3 是文件吗?:false
E:\Coding\Java\java-study2\a.txt 是文件夹吗?:false
E:\Coding\Java\java-study2 是文件夹吗?:true
E:\Coding\Java\java-study2\b.txt 是文件夹吗?:false
E:\Coding\Java\java-study3 是文件夹吗?:false

创建、删除文件和文件夹功能的方法

public boolean createNewFile() throws IOException 当且仅当不存在具有此抽象路径名指定名称的文件时,创建一个新的空文件。

boolean mkdir() 创建单级文件夹。
boolean mkdirs() 既可创建单级文件夹,也可以创建多级文件夹。

public boolean delete() 删除指定路径名表示的文件或目录

import java.io.File;
public class Demo05File {
    public static void main(String[] args) throws IOException {
        show1();
        show2();
        show3();
    }

    /**
     * public boolean createNewFile() throws IOException 当且仅当不存在具有此抽象路径名指定名称的文件时,创建一个新的空文件。
     * 创建的文件的路径和文件名有构造方法传入
     * true:文件不存在,创建文件,返回true
     * flase:文件存在,不会创建,返回false
     */
    private static void show1() throws IOException {
        File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\demo1\\a.txt");
        boolean b = file1.createNewFile();
        System.out.println("是否成功创建新文件?:" + b); // 是否成功创建新文件?:true

        b = file1.createNewFile();
        System.out.println("是否成功创建新文件?:" + b); // 是否成功创建新文件?:false
    }

    /**
     *  boolean mkdir() 创建单级文件夹。
     *  boolean mkdirs() 既可创建单级文件夹,也可以创建多级文件夹。
     *  true:文件夹不存在,创建文件夹,返回true
     *  false:文件夹存在,不会创建文件夹,返回false。构造方法给出路径不存在,返回false。
     */
    private static void show2() {
        // 创建单级文件夹
        File file1 = new File("111");
        boolean b1 = file1.mkdir();
        System.out.println(b1); // true

        // 创建多级文件夹
        File file2 = new File("222\\333\\444\\555");
        boolean b2 = file2.mkdirs();
        System.out.println(b2); // true

        // 在前面创建了一部分文件夹的基础上,继续创建文件夹
        File file3 = new File("222\\333\\444\\555\\666");
        boolean b3 = file3.mkdirs();
        System.out.println(b3); // true

    }

    /**
     * public boolean delete() 删除指定路径名表示的文件或目录
     * true:删除文件或文件夹成功,返回true
     * false:文件夹中有内容,不会删除,返回false。构造方法的路径不存在,返回false。
     * 注意:
     *      被删除的文件或文件夹直接从硬盘消失,不会出现在回收站!!!
     */
    private static void show3() {
        File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\demo1\\a.txt");
        boolean b1 = file1.delete();
        System.out.println("第1次删除a.txt:"+b1); // 第1次删除a.txt:true

        boolean b2 = file1.delete();
        System.out.println("第2次删除a.txt:"+b2); // 第2次删除a.txt:false

        File file2 = new File("111");
        boolean b3 = file2.delete();
        System.out.println("删除空文件夹111:"+b3); // 删除空文件夹111:true

        File file3 = new File("222");
        boolean b4 = file3.delete();
        System.out.println("删除内部还有多级文件夹的222:"+b4); // 删除内部还有多级文件夹的222:false

        // 不存在的文件夹
        File file4 = new File("777");
        boolean b5 = file4.delete();
        System.out.println("删除不存在的文件夹777:"+b5); // 删除不存在的文件夹777:false
    }
}

目录遍历功能的方法

public String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

public File[] listFiles()返回一个File数组,这些路径名表示此抽象路径名表示的目录中的文件。

import java.io.File;

// 目录遍历
public class Demo06File {
    public static void main(String[] args) {
        show1();
        show2();
    }

    /**
     * public String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
     *
     * 遍历构造方法传入的目录,把目录下的文件和文件夹名称全部存到String数组中(可以遍历到隐藏的文件和文件夹)
     * 点击文件或者文件夹右键选择属性,隐藏选项打钩,应用确定,文件或者文件夹就隐藏了。
     *
     * 构造方法的目录不存在,抛空指针异常
     * 构造方法传入的不是一个目录,抛空指针异常
     */
    private static void show1() {
        // 真实存在的文件夹目录
        File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\demo1");

        // 构造方法的目录不存在,抛空指针异常
        //File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\demo100");

        // 构造方法传入的不是一个目录,抛空指针异常
        // 即使传入真实存在的文件路径,也抛出空指针异常
        //File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\aa.txt");

        String[] list = file1.list();
        for (String s : list) {
            System.out.println(s);
        }
        // 输出结果
        // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\aa.txt
        // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo01File.java
        // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo02File.java
        // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo03File.java
        // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo04File.java
        // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo05File.java
        // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo06File.java
        // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\我是一个隐藏文件.txt
        // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\我是一个隐藏文件夹

    }

    /**
     * public File[] listFiles()返回一个File数组,这些路径名表示此抽象路径名表示的目录中的文件。
     *
     * 遍历构造方法传入的目录,把目录下的文件和文件夹名称封装成File对象,并存到File数组中(可以遍历到隐藏的文件和文件夹)
     */
    private static void show2() {
        // 真实存在的文件夹目录
        File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\demo1");

        File[] list = file1.listFiles();
        for (File file : list) {
            System.out.println(file);
        }
        // 输出结果
        // aa.txt
        // Demo01File.java
        // Demo02File.java
        // Demo03File.java
        // Demo04File.java
        // Demo05File.java
        // Demo06File.java
        // 我是一个隐藏文件.txt
        // 我是一个隐藏文件夹
    }
}

递归遍历目录

/**
 *  递归遍历得到文件夹下所有的文件夹和文件
 *  使用listFiles()只能得到下一级的文件和文件夹
 *  例如:
 *  a\b\c.txt 使用listFiles()方法遍历a文件夹,只能遍历到c文件夹,遍历不到c文件夹下的test.txt
 *
 *  测试的文件目录结构如下:
 *  D:\a
 *  D:\a\b
 *  D:\a\b\c
 *  D:\a\b\c.txt
 *  D:\a\b.txt
 *
 */
import java.io.File;
public class Demo07File {
    public static void main(String[] args) {
        File file  = new File("D:\\a");
        // 1.只使用使用listFiles()方法遍历
        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f.getAbsolutePath());
        }

        System.out.println("=============分割线==============");
        // 2.递归遍历

        getFiled(file);
    }

    private static void getFiled(File dir) {
        // 打印要遍历的目录
        System.out.println(dir.getAbsolutePath());
        // 遍历当前目录
        File[] files = dir.listFiles();
        for (File file : files) {
            if(file.isDirectory()){
                // 还是目录就递归调用自己
                getFiled(file);
            }else{
                // 文件
                System.out.println(file.getAbsolutePath());
            }
        }
    }
}

输出结果:

D:\a\b
D:\a\b.txt
=============分割线==============
D:\a
D:\a\b
D:\a\b\c
D:\a\b\c.txt
D:\a\b.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值