一、File 类概述

一、File 类概述

       我们在使用 IO 流读写和写入数据时,就需要知道电脑本地的文件是以什么形式存在的,只有保证文件真实存在才可以顺利的进行 IO 操作。为了保证程序文件的可操作性,Java 提供了 File 类,其中定义了一些操作文件的方法,便于我们在开发中使用。

  • JAVA.IO.File类
    • 概述:文件和目录(文件夹)路径名的抽象表示形式

1、File类中的构造方法

  • 构造方法:
    • File(String pathname):根据一个路径得到File对象
    • File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
    • File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

Demo代码示例:

public class FileDemo {
	  public static void main(String[] args) {
		  // File(String pathname):根据一个路径得到File对象
		  // 把e:\\adu\\a.txt封装成一个File对象
		     File file = new File("E:\\adu\\a.txt");
		
	 // File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
		     File file2 = new File("E:\\adu", "a.txt");
		
	// File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
		     File file3 = new File("e:\\adu");
		     File file4 = new File(file3, "a.txt");
		
		// 以上三种方式其实效果一样
    }
}


2、File类中的成员方法

  • 创建功能:
    • public boolean createNewFile():创建文件,查看当前路径下是否存在想要创建的文件,如果存在就不创建,方法返回 false。如果不存在就将文件创建出来,方法返回 true。
    • public boolean mkdir():创建文件夹,查看当前路径下是否存在想要创建的文件,如果存在就不创建,方法返回 false。如果不存在就将文件创建出来,方法返回 true。
    • public boolean mkdirs():创建多级文件夹,查看当前路径下是否存在想要创建的多级文件夹。如果存在就不创建,方法返回 false。如果不存在就将整个多级文件夹创建出来或者将多级文件夹补齐,方法返回 true。

Demo 代码示例:

public class FileDemo {
    public static void main(String[] args) throws IOException {
    
        // 在g盘目录下创建一个文件夹adu
        File file = new File("C:\\adu");
        System.out.println("mkdir:" + file.mkdir());

        // 在g盘目录adu下创建一个文件a.txt
        File file2 = new File("C:\\adu\\a.txt");
        System.out.println("createNewFile:" + file2.createNewFile());
        
        // 创建多级目录
        File file3 = new File("C:\\aaa\\bbb\\ccc\\ddd");
        System.out.println("mkdirs:" + file3.mkdirs());
    }
}


  • 删除功能
    • public boolean delete()
      • 使用删除功能操作文件时需要注意几点:
        • Java将文件删除是不走回收站的,可以理解为“彻底删除”。
        • 如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
        • 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹,否则会删除失败。

Demo 代码示例:

public class FileDemo {
    public static void main(String[] args) throws IOException {
    
        // 在C盘目录下创建一个文件夹adu
        File file = new File("C:\\adu");
        System.out.println("mkdir:" + file.mkdir());
        
        //delete()  将对象指定路径的文件删除
 		boolean delete = file7.delete();//delete()  将对象指定路径的文件删除
            System.out.println(delete);
    
        }
    }


  • 重命名功能:
    • public boolean renameTo(File dest)

Demo代码示例:

public class FileDemo {
    public static void main(String[] args) {
        // 创建一个文件对象
         File file = new File("g:\\A.jpg");//这一步是指定需要修改的路径
         // 需求:我要修改这个文件的名称为"B.jpg"
         File newFile = new File("g:\\B.jpg");//这一步是定义需要修改的名字
         System.out.println("renameTo:" + file.renameTo(newFile));//renameTo()文件重命名方法
       
    }
}


  • 判断功能
    • public boolean isDirectory():判断是否是目录
    • public boolean isFile():判断是否是文件
    • public boolean exists():判断文件是否存在
    • public boolean canRead():判断文件是否可读
    • public boolean canWrite():判断文件是否可写
    • public boolean isHidden():判断文件是否隐藏

Demo代码示例:

public class FileDemo {
    public static void main(String[] args) {
        // 创建文件对象//我们选择G盘已存在的a.txt
        File file = new File("C:\\AAA");

        System.out.println("isDirectory:" + file.isDirectory());
        System.out.println("isFile:" + file.isFile());
        System.out.println("exists:" + file.exists());
        System.out.println("canRead:" + file.canRead());
        System.out.println("canWrite:" + file.canWrite());
        System.out.println("isHidden:" + file.isHidden());
    }
}

运行结果:
在这里插入图片描述



  • 获取功能(基本获取功能)
    • public String getAbsolutePath():获取绝对路径
    • public String getPath():获取相对路径
    • public String getName():获取名称
    • public long length():获取长度。字节数
    • public long lastModified():获取最后一次的修改时间,毫秒值

Demo代码示例:

public class FileDemo {
    public static void main(String[] args) {
        // 创建文件对象
        File file = new File("C:\\adu\\a.txt");

        System.out.println("getAbsolutePath:" + file.getAbsolutePath());
        System.out.println("getPath:" + file.getPath());
        System.out.println("getName:" + file.getName());
        System.out.println("length:" + file.length());
        System.out.println("lastModified:" + file.lastModified());


        //1472893011393
        Date d = new Date(1472893011393L);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String s = sdf.format(d);
        System.out.println(s);
    }
}

运行结果:

在这里插入图片描述



  • 获取功能(高级获取功能)
    • public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
    • public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
public class FileDemo {
    public static void main(String[] args) {
        // 指定一个目录
        File file = new File("C:\\");

        // public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
        String[] strArray = file.list();
        for (String s : strArray) {
            System.out.println(s);
        }
        System.out.println("------------");

        // public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
        File[] fileArray = file.listFiles();
        for (File f : fileArray) {
            System.out.println(f.getName());
        }
    }
}


3、文件过滤器和文件遍历器的实现

文件过滤器:查询C盘根目录后缀为.log的文件

public class FileDemo {
    public static void main(String[] args) {
        // 封装C 判断目录
        File file = new File("C:\\");

        // 获取该目录下所有文件或者文件夹的String数组
        // public String[] list(FilenameFilter filter)
        String[] strArray = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //如果是文件,输出以.jpg结尾的文件,这两个条件要同时满足
                return new File(dir, name).isFile() && name.endsWith(".log");
            }
        });

        // 遍历
        for (String s : strArray) {
            System.out.println(s);
        }
    }
}

文件遍历器:利用递归查询C盘下所有的文件

/**
 * 递归练习:使用递归列出windows目录下的所有文件夹及所有文件(不包括隐藏目录及文件)

 */
public class FileRecursion {

    public static void main(String[] args) {
        getAllFile(new File("c:\\windows"));
    }

    public static void getAllFile(File dir) {
        File[] files = dir.listFiles();
        if (files != null) {
            for (File f : files) {
                // 如果获取的File类型是目录,则进行递归调用
                if (f.isDirectory()) {
                    System.out.println("目录:" + f);
                    getAllFile(f);
                } else {
                    // 如果获取的File类型是文件,则直接打印输出
                    System.out.println("文件:" + f);
                }
            }
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值