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天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
6天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2506 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
6天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1519 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
8天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
531 13
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18836 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17524 13
Apache Paimon V0.9最新进展
|
8天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
458 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
355 4
叮咚!您有一份六大必做安全操作清单,请查收
|
2天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。