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");
    }


}

在这里插入图片描述


相关文章
|
机器学习/深度学习
基于PaddleGAN精准唇形合成模型实现美女表白视频
基于PaddleGAN精准唇形合成模型实现美女表白视频
2166 0
基于PaddleGAN精准唇形合成模型实现美女表白视频
|
10月前
|
人工智能 前端开发 语音技术
开源学习神器把2小时网课压成5分钟脑图!BiliNote:一键转录哔哩哔哩视频,生成结构化学习文档
本文介绍基于FastAPI与React构建的开源视频笔记工具BiliNote,其整合多模态AI技术实现视频内容结构化解析,支持跨平台视频源处理与本地化部署方案,提供从语音转写到智能摘要的全流程自动化能力。
2045 36
开源学习神器把2小时网课压成5分钟脑图!BiliNote:一键转录哔哩哔哩视频,生成结构化学习文档
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
10月前
|
人工智能 计算机视觉
漫画师福音!开源AI神器让线稿着色快如闪电!MagicColor:港科大开源多实例线稿着色框架,一键生成动画级彩图
MagicColor是香港科技大学推出的多实例线稿着色框架,基于扩散模型和自监督训练策略,实现单次前向传播完成多实例精准着色,大幅提升动画制作和数字艺术创作效率。
828 20
漫画师福音!开源AI神器让线稿着色快如闪电!MagicColor:港科大开源多实例线稿着色框架,一键生成动画级彩图
|
XML Java 应用服务中间件
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
通过一个HelloWorld实例,介绍了SpringMVC的基本概念、执行流程,并详细讲解了如何创建和配置第一个SpringMVC项目(基于XML)。
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
Properties类的使用
本文介绍了Java中Properties类的使用,它继承自Hashtable,用于处理属性文件。Properties对象可以保存键值对,并且能够从输入流加载或保存到输出流。文章展示了如何读取和写入properties文件,包括使用`setProperty`和`getProperty`方法来设置和获取属性值,以及使用`list`方法打印属性到控制台。同时,还解释了Properties类底层使用的哈希表结构,并提到了字符编码转换问题,特别是在处理中文时会转换成unicode编码。
|
XML 前端开发 Java
springMVC01,【第一个springMVC例子(注解版):HelloWorld】
文章介绍了如何使用注解配置创建第一个SpringMVC项目,并讲解了SpringMVC的执行流程,包括配置web.xml、编写springmvc-servlet.xml配置文件、创建带有@RequestMapping注解的控制器层以及运行测试和执行流程小结。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
JavaScript 前端开发
js登录注册简单tab切换页面(含前台表单验证)
文章介绍了如何使用HTML、CSS和JavaScript创建一个简单的登录注册页面,并实现Tab切换效果。包括了表单验证,点击登录或注册按钮时,可以切换显示相应的表单。同时提供了完整的前端代码和实现效果图。
|
前端开发 PHP
ThinkPHP6,视图的安装及模板渲染和变量赋值 view::fetch() ,view::assgin() ,助手函数
本文介绍了ThinkPHP6中视图的安装和使用,包括通过`composer`安装`topthink/think-view`,使用`view::fetch()`进行模板渲染和变量赋值,以及使用`view::assign()`进行全局模板变量赋值。还提到了助手函数作为`view::fetch()`和`view::assign()`的封装组合,但效率较低。
ThinkPHP6,视图的安装及模板渲染和变量赋值 view::fetch() ,view::assgin() ,助手函数