File类的使用

File类

Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。

File对象代表磁盘中实际存在的文件和目录。
在这里插入图片描述
在这里插入图片描述

静态成员变量

静态成员变量描述
static String pathSeparator路径分隔符 windows是分号; linux是冒号:
static char pathSeparatorChar与系统相关的路径分隔符。
static String separator文件名称分隔符 windows是 \ 反斜杠 ; linux是正斜杠/
static String pathSeparator文件名称分隔符
package com.gothic.sunset.demo1;

import java.io.File;

public class DemoTestFile1 {
    public static void main(String[] args) {
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator); // 路径分隔符;windows是分号;  linux是冒号:
        String separator = File.separator;
        System.out.println(separator); //  文件名称分隔符 windows是 \反斜杠  linux是正斜杠/
    }
}

构造方法

构造方法 Constructor描述
File​(File parent, String child)从父抽象路径名和子路径名字符串创建新的 File实例。
File​(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
File​(String parent, String child)从父路径名字符串和子路径名字符串创建新的 File实例。
File​(URI uri)通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
package com.gothic.sunset.demo1;

import java.io.File;

public class DemoTestFile2 {


    //File相关构造类的使用
    public static void main(String[] args) {

       // show1(); 通过指定路径来创建file对象

        show2();


    }


    //通过指定的路径来创建file对象
    private static void show1() {
        //先拿绝对路径来试试
        File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
        System.out.println(file1);
        //再试试相对路径----- 这里必须使用完整的绝对路径
        File file2 = new File("\\text\\a.txt");
        System.out.println(file2);

    }

    // 从父路径名字符串和子路径名字符串创建新的 File实例。
    // 从父抽象路径名(File对象)和子路径名字符串创建新的 File实例。
    private static void show2() {

        //父路径和子路径结合获取file对象
        File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text","a.txt");
        System.out.println(file1);

        // 使用file对象作为父路径,再使用子路径字符串拼接
        File fileParent = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text");
        System.out.println("父路径对象:"+fileParent);
        File fileChild = new File(fileParent,"a.txt");
        System.out.println("fileChild"+fileChild);

    }


}

常用方法

返回值 方法名 参数描述
String getPath​()将此File对象转换为路径名字符串。
String getAbsolutePath​()返回此File对象的绝对路径名字符串。
String getName()返回由此抽象路径名表示的文件或目录的名称。
long length​()返回由此File对象表示的文件的长度。
boolean exists()测试此File对象表示的文件或目录是否存在。
boolean isDirectory()测试此File对象表示的文件是否为目录
boolean isFile()测试此File对象表示的文件是否为普通文件
package com.gothic.sunset.demo1;

import java.io.File;

public class DemoTestFile3 {

    public static void main(String[] args) {

        // testMethod1();
        // testMethod2();
        // testMethod3();
        testMethod4();
    }


    //File类常用方法介绍

    //String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
    private static void testMethod1() {
        File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
        String absolutePath = file1.getAbsolutePath();
        System.out.println(absolutePath);
        //相对路径抽象file对象,这里因为我是在工程下,,,,,
        File file2 = new File("src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
        String absolutePath2 = file2.getAbsolutePath();
        System.out.println(absolutePath2);

    }

    // String getPath() 将此抽象路径名转换为路径名字符串。  其实就是file的toString
    private static void testMethod2(){
        File file2 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
        String path = file2.getPath();
        System.out.println(path);
    }


    // String getName() 返回由此抽象路径名表示的文件或目录的名称。
    private static void testMethod3(){

        File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
        System.out.println(file1.getName());

    }

    //long length() 返回由此抽象路径名表示的文件的长度。
    //如果文件不存在,则返回0
    public static void testMethod4(){

        File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
        long length = file1.length();
        System.out.println(length);

        File file2 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\鲸鱼小屋.png");
        long length2 = file2.length();
        System.out.println(length2);

    }
}

package com.gothic.sunset.demo1;

import java.io.File;

public class DemoTestFile4 {

    public static void main(String[] args) {

        //判断文件是否存在以及它是文件夹还是文件
        testShow();

    }

    //boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
    //boolean isDirectory() 测试此抽象路径名表示的文件是否为目录。
    //boolean isFile() 测试此抽象路径名表示的文件是否为普通文件。
    public static void testShow(){

        File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\鲸鱼小屋.png");
        if (file1.exists()){
            System.out.print("路径存在");
            if (file1.isFile()){
                System.out.print("并且它是文件");
                return;
            }
            if (file1.isDirectory()){
                System.out.print("并且它是文件夹");
                return;
            }
        }
        System.out.println("路径不存在");

    }
}

用于创建、删除文件/文件夹的方法

返回值 方法名 参数描述
boolean createNewFile()当且仅当具有该名称的文件尚不存在时,创建一个由该File对象命名的新的空文件
boolean mkdir()创建由此File对象路径名命名的目录。 创建单级文件夹
boolean mkdirs()创建由此File对象路径名命名的目录,包括任何必需但不存在的父目录。创建单级和多级文件夹
boolean delete()删除由此File对象路径名表示的文件或目录
package com.gothic.sunset.demo1;

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

public class DemoTestFile5 {


    public static void main(String[] args) throws IOException {

        show();
    }

    /* 创建删除功能
     *
     * boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
     * boolean mkdir() 创建由此抽象路径名命名的目录。 创建单级文件夹
     * boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。创建单级和多级文件夹
     * boolean delete() 删除由此抽象路径名表示的文件或目录。
     */
    private static void show() throws IOException {

        //创建一个多级文件夹
        File file1 = new File("C:\\Users\\gothi\\Desktop\\aa\\新建文件夹\\新建文件夹");
        System.out.println(file1.mkdirs());

        //在多级文件夹的基础上,创建一个单级文件夹
        File file2 = new File("C:\\Users\\gothi\\Desktop\\aa\\新建文件夹\\新建文件夹\\单级文件夹");
        System.out.println(file2.mkdir());

        //在单级文件夹的基础上创建一个a.txt文件
        File file3 = new File("C:\\Users\\gothi\\Desktop\\aa\\新建文件夹\\新建文件夹\\单级文件夹\\a.txt");
        System.out.println(file3.createNewFile());

        // 删除文件
        if(file3.exists()&&file3.isFile()){
            boolean delete = file3.delete();
            System.out.println("是否删除成功:"+delete);
        }

    }

}

用于遍历文件/文件目录的方法

返回值 方法名 参数描述
String[] list()返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
File[] listFiles()返回一个File类型的数组,表示由该抽象路径名表示的目录中的文件。

如果遍历的是一个文件或者不存在的文件夹目录 则会返回空指针异常NullPointerException

package com.gothic.sunset.demo1;

import java.io.File;

public class DemoTestFile6 {


    public static void main(String[] args) {
         show();
        // show2();

    }

    // 使用 String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。来遍历
    private static void show() {

        // 返回aa目录下的第一级包括的文件
        File file1  = new File("C:\\Users\\gothi\\Desktop\\aa");
        String[] list = file1.list();
        // 断言测试
        assert list != null;

        for (String s : list) {
            System.out.println(s);
        }

        // 如果遍历的是一个文件或者不存在的文件夹目录 则会返回空指针异常
        // File file2  = new File("C:\\Users\\gothi\\Desktop\\aa\\b"); // NullPointerException
        File file2  = new File("C:\\Users\\gothi\\Desktop\\aa\\b.txt"); // NullPointerException
        String[] list2 = file2.list();
        // 断言测试
        assert list2 != null;
        for (String s : list2) {
            System.out.println(s);
        }
    }

    // 使用 File[] listFiles() 来遍历
    private static void show2() {
        // 使用  File[] listFiles()  遍历的话,会将其目录下的所有文件的绝对路径返回到一个File类型的数组
        File file2  = new File("C:\\Users\\gothi\\Desktop\\aa");
        File[] list2 = file2.listFiles();
        assert list2 != null;
        for (File file : list2) {
            System.out.println(file);
        }

    }

}

文件过滤器方法

返回值 方法名 参数描述
String[] list(FilenameFilter filter)返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FileFilter filter)返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
File[] listFiles(FilenameFilter filter)返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。

需求,找某一目录下的以.txt结尾的所有文件

1.手写的方式

package demo;

import java.io.File;
import java.util.Locale;

public class Pc {
    public static void main(String[] args) {
		// 文件路径
        String filePath = "C:\\Users\\gothi\\Desktop\\aa";
        // 创建file对象
        File f = new File(filePath);
        getAllFiles(f);
    }

    public static void getAllFiles(File file){
        File[] listFiles = file.listFiles();
        for (File fileItem:listFiles) {
            // 文件则继续递归
            if(fileItem.isDirectory()){
                getAllFiles(fileItem);
            }
            // 如果是文件则,判断其是否是以.txt结尾的
            if(fileItem.isFile()){
                if (fileItem.getPath().toLowerCase().endsWith(".txt")){
                    System.out.println(fileItem.getPath());
                }
            }
        }
    }
}

在这里插入图片描述
2.使用filefilter来过滤

package demo;

import java.io.File;
import java.io.FileFilter;
import java.util.Locale;

public class Pc {
    public static void main(String[] args) {

        String filePath = "C:\\Users\\gothi\\Desktop\\aa";
        File f = new File(filePath);
        // getAllFiles(f);
        getTxt(f);
    }

    public static  void getTxt(File file){
        File[] listFiles = file.listFiles(new FileFilterTest());
        for (File listFile : listFiles) {
           if(listFile.isDirectory()){
               getTxt(listFile);
           }else {
               System.out.println(listFile);
           }
        }
    }


}
// 一个内部类实现了FileFilter接口
class FileFilterTest implements FileFilter{

    // 重写accept方法
    @Override
    public boolean accept(File pathname) {
        // 如果是文件夹则继续遍历 并且过滤掉
        if(pathname.isDirectory()){
            return true;
        }
        // 如果是文件则不遍历,进行判断是否是以.txt结尾的,是的话返回true
        return pathname.getPath().toLowerCase().endsWith(".txt");
    }


}



在这里插入图片描述


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杀死一只知更鸟debug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值