java IO File类和FilenameFilter文件名称过滤器

2023-12-30 09:58

本文主要是介绍java IO File类和FilenameFilter文件名称过滤器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

File类

Java文件类以抽象的方式代表文件名和目录路径名,定义了一些与平台无关的方法来操作文件,可以通过调用File类中的方法,实现创建、删除、重命名文件等。File对象代表磁盘中实际存在的文件和目录.

构造方法:

File(String pathname)  通过将给定路径名字字符串转换为抽象路径来创建一个File对象。

File(String parent, String child) 根据给定的父路径和子路径的字符串(可包含文件名)创建一个File对象

File(File parent, String child)通过给定的父抽象路径名和子路径名字符串创建一个File对象。

File(URI uri) 通过将给定的 URI 转换成一个抽象路径名来创建一个File对象。

常用方法,创建文件或者文件夹,如果没有写盘符路径,默认在项目路径里面创建

public boolean createNewFile() throws IOException,当File对象不存在时,创建一个File对象(File对象的路径下)的文件,返回true,当File对象对应的文件存在时,不创建,返回false

public boolean mkdir() 创建File对象的抽象路径名指定的目录文件夹,只创建路径最后的那个文件夹,比如"I:\\hello\world"。如果hello文件夹不存再,则不会创建world文件夹,hello文件夹存在,world才能创建.
 public boolean mkdirs()创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。这两个方法只能创建目录,不管File对象的路径名以什么结尾,比如"I:\\hello\\world.doc",会创建多层文件夹,最后一层文件夹的名字是world.doc,注意不是word文档

 

重命名或者删除文件/文件夹

public boolean renameTo(File dest)对文见的抽象路径名进行重命名,参数是File对象,而不是字符串,如果两个File对象的路径不相同,则会将被修改的文件进行剪切,然后再重命名放到新的路径里面

public boolean delete()删除File对象对应的文件或者文件夹,删除时不会放入回收站,当File对象是文件夹时,要确保被删除的文件夹里面没有其他文件才可以进行删除成功

判断方法:

public boolean isDirectory():判断File对象是否是目录

public boolean isFile():判断File对象是否是文件

public boolean exists():判断File对象是否存在

public boolean isHidden():判断File对象是否被隐藏

其他常用方法

public String getName()返回文件或目录的名称,如果创建File对象时传入的路径有多级路径,只显示最后一层

 public String getPath()获取File对象的路径名组成的字符串,即创建对象时传入的路径(绝对路径或者相对路径)

public String getAbsolutePath():获取File对象的绝对路径

public long length():获取File对象对应文件的大小。返回字节数

public long lastModified():获取最后一次的修改时间,毫秒值,可格式化成时间

public String[] list():获取文件路径(同一层级目录)下所有文件名)

public String[] list(FilenameFilter filter)获取文件路径(同一层级目录)下的通过满足指定过滤器的文件名/文件夹名组成的字符串数组

public File[] listFiles():获取文件路径下同级文件的File对象数组

public File[] listFiles(FileFilter filter)获取文件路径下同级文件的满足特定过滤器的File对象数组
 

创建,删除,重命名文件/文件夹示例:

import java.io.File;
import java.io.IOException;public class FileTest01 {public static void main(String[] args) throws IOException {File f1=new File("I:\\java.doc");System.out.println( f1.createNewFile());//不写盘符,会在工程目录下创建文件夹File f2=new File("hello.txt");f2.mkdir();File f3=new File("I:\\hello\\world");//mkdir只创建最后的一层文件夹,不管路径最后以什么结尾,都会是文件夹f3.mkdir();File f4=new File("I:\\world\\hello.txt");//mkdirs创建多层文件夹f4.mkdirs();//将I:\java.doc重命名成javase.docFile f5=new File("I:\\java.doc");File f6=new File("I:\\javase.doc");f5.renameTo(f6);//将javase.doc剪切到不同的目录下,并重命名File f7=new File("I:\\javase.doc");File f8=new File("I:\\world\\hello.txt\\javaSpring.txt");f7.renameTo(f8);File f9=new File("I:\\world");//删除文件或者文件夹,如果目录下有文件或者文件夹,不会删除System.out.println( f9.delete());File f10=new File("hello.txt");f10.delete();}
}

判断方法和其他常用方法的示例:


import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;public class FileTest02 {public static void main(String[] args){File   f1=new File("i:\\java.doc");//判断是否为文件夹System.out.println( f1.isDirectory());//判断是否为文件System.out.println( f1.isFile());//判断是否是隐藏的System.out.println( f1.isHidden());//判断是否存在System.out.println( f1.exists());//创建一个路径不存在的File对象File f2=new File("i:\\helloworld");System.out.println( f2.isDirectory());System.out.println( f2.isFile());System.out.println( f2.isHidden());System.out.println( f2.exists());File f3=new File("2.txt");//返回文件/文件夹的名字System.out.println( f3.getName());//返回路径System.out.println( f3.getPath());//返回绝对路径System.out.println( f3.getAbsolutePath());//返回文件的大小,以字节计算System.out.println( f3.length());//获取最后一次修改时间,返回long类型,需要转换成Data类型long dat=f3.lastModified();Date date=new Date(dat);SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS");System.out.println( sdf.format(date));File f4=new File("i:\\world\\hello.txt\\javaSpring.txt");System.out.println( f4.getName());System.out.println( f4.getPath());System.out.println( f4.getAbsolutePath());System.out.println( f4.length());System.out.println( "-------------------------------------");File f5=new File("e:\\workspace\\javaIo");//获取路径下面同级文件/文件夹的名称,以String数组返回String[] strs=f5.list();for (String str:strs){System.out.println( str);}//获取路径下面统计文件/文件夹的File对象数组File [] files=f5.listFiles();//打印出文件的绝对路径for (File file:files){System.out.println( file);}}
}

练习1:统计项目根目录下的文件名中以.txt结尾的文件个数,并将其打印出来

 

 项目文件关系如右图

import java.io.File;
//考虑到文件夹也可能以.txt结尾命名,所以要判断名称后缀还要判断是不是文件类型
public class FileTest03 {public static void main(String[] args){File f1=new File("e:\\workspace\\javaIo");File [] files=f1.listFiles();int count=0;for(File file:files){if ( file.getName().endsWith(".txt")){if(file.isFile()) {count++;System.out.println(file.getName());}}}}
}
out:
1.txt
2.txt
word.txt
word1.txt

练习2: 统计工程目录下所有的txt文件个数,并打印出绝对路径,文件目录如下:

代码示例:

import java.io.File;public class FileTest04 {static int count=0;//静态方法可以直接调用静态成员变量public static void main(String[] args){File f=new File("e:\\workspace\\javaIo");ReadFile(f,".txt");System.out.println( "共有"+count+"个txt文件");}public static void ReadFile(File f,String endMark){File[] fileArr=f.listFiles();for (File file :fileArr){if (file.isDirectory()){ReadFile(file,endMark);}else{if (file.isFile()&&file.getName().endsWith(endMark)){System.out.println( file.getAbsoluteFile());count++;}}}}}
out:
e:\workspace\javaIo\1.txt
e:\workspace\javaIo\2.txt
e:\workspace\javaIo\test\test.txt
e:\workspace\javaIo\test\test0.txt
e:\workspace\javaIo\test\test1.txt
e:\workspace\javaIo\test\test2.txt
e:\workspace\javaIo\test\test3.txt
e:\workspace\javaIo\test\test4.txt
e:\workspace\javaIo\test\test6.txt
e:\workspace\javaIo\test\test7.txt
e:\workspace\javaIo\word.txt
e:\workspace\javaIo\word1.txt
共有12个txt文件

FilenameFilter文件名称过滤器

File类的list方法的重载方法和listFiles方法的重载方法中,有一个参数FilenameFilter实例

public String[] list(FilenameFilter filter)
public File[] listFiles(FileFilter filter)

FilenameFilter是java.io包下的一个接口,只有一个方法,两个参数第一个参数是File对象(代表到某个文件夹),第二个参数是文件名(调用list方法得到的文件名),两个参数拼接下(调用File类构造器File(File parent, String child)得到parent文件夹下的某个文件/文件夹的File对象),就得到了目录下某个文件的File对象,根据File对象编写条件来返回布尔值,决定list返回的字符串数组中是否过滤掉某些File对象的文件名,或者listFiles返回的File数组中是否过滤掉某些对象

public interface FilenameFilter {boolean accept(File dir, String name);
}

以list方法来看:File类中list重载方法的源码(jdk11)

public String[] list(FilenameFilter filter) {String names[] = list();if ((names == null) || (filter == null)) {return names;}List<String> v = new ArrayList<>();for (int i = 0 ; i < names.length ; i++) {if (filter.accept(this, names[i])) {v.add(names[i]);}}return v.toArray(new String[v.size()]);}

以练习1中统计工程目录下txt文件的数量,并打印出txt文件的文件名为例来演示:

import java.io.File;
import java.io.FilenameFilter;public class FileTest05 {public static void main(String[] args){File f=new File("e:\\workspace\\javaIo");String [] nameArr=f.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {File f1=new File(dir,name);if (f1.isFile()&&f1.getName().endsWith(".txt")){return true;}return false;}});System.out.println("当前工程根目录下的txt文件有"+nameArr.length+"个");for (String name:nameArr){System.out.println( name);}}
}
out:
当前工程根目录下的txt文件有4个
1.txt
2.txt
word.txt
word1.txt

 

这篇关于java IO File类和FilenameFilter文件名称过滤器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/552492

相关文章

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过