Java之File类详解

File类

1 概述

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

构造方法

package java.io;

public class File implements Serializable, Comparable<File>
{
    //通过路径名字符串来创建 File实例
 	public File(String pathname);
    //根据父路径和子文件名创建 File实例
	public File(String parent, String child);
	public File(File parent, String child); 
    
    //省略...
}

路径知识补充:

  • 绝对路径:从盘符开始的路径

    表示目录:E:\work\2024-CoreJava

    表示文件:D:\briup\2024-CoreJava\Test01_File.java

  • 相对路径:不从盘符开始,IDEA中相对路径相对于所在项目目录,开发中经常使用

    表示目录:com\briup\day20

    表示文件:Test01.Java

**案例:**使用绝对和相对路径,实例化File对象

package com.briup.chap11.test;

public class Test011_File {
	public static void main(String[] args) {
		// 文件路径名
		String pathname = "D:\\aaa.txt";
		File file1 = new File(pathname);

		// 文件路径名
		String pathname2 = "D:\\aaa\\bbb.txt";
		File file2 = new File(pathname2);

		// 通过父路径和子路径字符串
		String parent = "D:\\aaa";
		String child1 = "bbb.txt";
		File file3 = new File(parent, child1);

		// 通过父级File对象和子路径字符串
		File parentDir = new File("D:\\aaa");
		String child2 = "bbb.txt";
		File file4 = new File(parentDir, child2);
	}
}
}

注意:File对象能够关联文件系统中文件或目录。该文件或目录可以不存在。

2 使用

1)判断及路径相关

//判断文件或目录是否存在
public boolean exists();
//判断是否是文件
public boolean isFile();
//判断是否是目录
public boolean isDirectory();

//File绝对路径名字符串
public String getAbsolutePath();
//File文件构造路径
public String getPath();
//File文件或目录的名称
public String getName();
//File文件或目录的长度
public long length();

案例:

public static void main(String[] args) {
    File f1 = new File("E:\\aaa\\readMe.pdf");
    System.out.println("f1: " + f1);
    System.out.println("文件是否存在: " + f1.exists());

    System.out.println("------------");

    //关联目录
    File f2 = new File("E:\\briup");
    System.out.println(f2);
    System.out.println("是否存在: " + f2.exists());
    System.out.println("是否为目录文件:" + f2.isDirectory());
    System.out.println("是否为普通文件:" + f2.isFile());
    System.out.println("目录长度: " + f2.length());

    System.out.println("------------");

    //关联文件
    File f3 = new File(f2,"a.txt");
    System.out.println("f3路径: " + f3.getPath());
    System.out.println("f3绝对路径: " + f3.getAbsolutePath());
    System.out.println("f3.getName: " + f3.getName());

    System.out.println("------------");

    //使用相对路径[项目目录] 构建 File对象
    // 比如 D:\develop\idea-workspace\240626-CoreJava\
    File f4 = new File("test.txt");
    System.out.println("f4存在:" + f4.exists());
    //getPath(): 返回 构造方法 传递的 路径
    System.out.println("f4.getPath: " + f4.getPath());
    System.out.println("f4绝对路径: " + f4.getAbsolutePath());
    System.out.println("f4.getName(): " + f4.getName());

    System.out.println("f4.length: " + f4.length());
}

运行效果:
在这里插入图片描述
注意:length()表示文件长度,如果File对象表示目录,则返回值不确定。

2)创建删除操作

//当且仅当具有该名称的文件不存在时,创建一个新的空文件
public boolean createNewFile();
//创建目录
public boolean mkdir();
//创建多级目录
public boolean mkdirs();
//文件或目录的删除
public boolean delete();

案例:

//创建目录及文件
public static void main(String[] args) throws IOException {
    File f1 = new File("E:\\briup\\dir2");
    System.out.println("dir2目录存在:" + f1.exists());

    //创建 目录
    boolean flag = f1.mkdir();
    System.out.println("目录创建成功:" + flag);

    //创建 文件
    File f2 = new File(f1,"aaa.txt");
    flag = f2.createNewFile();
    System.out.println("创建aaa.txt: " + flag);

    //删除目录 或 文件
    flag = f1.delete();
    System.out.println("删除非空目录: " + flag);

    flag = f2.delete();
    System.out.println("删除文件: " + flag);

    //删除 空白目录
    flag = f1.delete();
    System.out.println("删除空白目录: " + flag);
}

注意:File对象.delete(),如果File对象表示目录,则该目录必须为空才能删除成功。

3)目录遍历操作

package java.io;

public class File implements Serializable, Comparable<File>
{
	//省略...
    
    //目录文件调用该方法,获取目录中所有子文件名,返回String数组
    //其他文件调用该方法,返回null
	public String[] list();
    
    //目录文件调用该方法,获取目录中所有子文件,返回File数组
    //其他文件调用该方法,返回null
    public File[] listFiles();
    
    //目录文件调用该方法,获取目录中符合筛选条件的子文件,返回File数组
    //其他文件调用该方法,返回null
    public File[] listFiles(FileFilter filter);
    
    //省略...
}

案例:

​ 准备目录D:\test,放入各类文件,编码对该文件夹进行遍历。

在这里插入图片描述

public static void main(String[] args) {
    //1.准备目录文件
    String dirPath = "D:\\test";
    File dirFile = new File(dirPath);

    //2.获取目录中所有子文件名称,并遍历输出
    String[] list = dirFile.list();
    for (String s : list) {
        System.out.println(s);
    }

    System.out.println("---------------");

    //3.准备普通文件
    String fileName = "readme.pdf";
    File file = new File(dirFile,fileName);

    //4.普通文件调用list返回null
    String[] list2 = file.list();
    System.out.println(list2);

    System.out.println("---------------");

    //5.获取目录中所有子文件对象,并遍历输出
    File[] listFiles = dirFile.listFiles();
    for (File f : listFiles) {
        System.out.println(f);
    }

    System.out.println("---------------");

    //6.使用文件过滤器,获取目录下所有普通文件,并遍历输出
    File[] listFiles2 = dirFile.listFiles(new FileFilter() {
        @Override
        public boolean accept(File f) {
            if(f.isFile())
                return true;
            return false;
        }
    });

    for (File f : listFiles2) {
        //输出文件名即可
        System.out.println(f.getName());
    }
}

输出结果:

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值