File类的使用

简介: 本文介绍了Java中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");
    }


}

在这里插入图片描述


相关文章
|
10月前
|
监控 C#
55.c#:file类
55.c#:file类
140 1
|
6月前
|
Java
File类的基本使用【 File类+IO流知识回顾①】
这篇文章回顾了Java中File类的基本使用,包括创建File对象、获取文件数据信息、判断文件存在与否、创建和删除文件目录,以及遍历文件目录的方法。
File类的基本使用【 File类+IO流知识回顾①】
|
7月前
|
API
|
9月前
|
C++
C++ 实现一个不能被copy的类
C++ 实现一个不能被copy的类
|
10月前
|
Java API Windows
File 类及其方法
File 类及其方法
87 1
|
10月前
|
存储 前端开发 JavaScript
前端base64转file文件方法
前端base64转file文件方法
759 0
File对象和相关方法01
File对象和相关方法01
File对象和相关方法02
File对象和相关方法02
File类的了解和使用
File类的了解和使用
182 0
File类的了解和使用
File类的使用(一)上
File类的使用(一)
188 0
File类的使用(一)上