File类之文件目录常用操作
(1)基本概念
Java.io.File类主要用于描述文件或目录路径的抽象表示信息,可以获取文件或者目录的特征信息,如大小等。
(2)常用方法
方法声明 | 功能介绍 |
File(String pathname) | 根据参数指定的路径名来构造对象 |
File(String parent,String child) | 根据参数指定的父路径和子路径信息构造对象 |
File(file parent,String child) | 根据参数指定的父抽象路径和子路径信息构造对象 |
boolean exists() | 测试此抽象路径名表示的文件或者目录是否存在 |
String getName() | 用于获取文件的名称 |
long length() | 返回由此抽象路径名表示的文件的长度 |
long lastModified() | 用于获取文件的最后一次修改时间 |
String getAbsolutePath() | 用于获取绝对路径信息 |
boolean delete() | 用于删除文件,当删除目录时要求是空目录 |
boolean createNewFile() | 用于创建新的空文件 |
boolean mkdir() | 用于创建目录 |
boolean mkdirs() | 用于创建多级目录 |
File[ ] listFiles | 获取该目录下的所有内容 |
boolean isFile() | 判断是否为文件 |
boolean isDirectory() | 判断是否为目录 |
File[ ] listFiles(FileFilter filter) | 获取目录下满足筛选器 filter 的所有内容 |
(3)代码示例 【文件操作】
public class FileTest {public static void main(String[] args) throws IOException {// 1、构造File类型的对象与d:/a.txt关联File f1 = new File("d:/a.txt");// 2、若文件存在则获取该文件的相对特征信息并打印后删除文件if (f1.exists()) {System.out.println("文件的名称是:" + f1.getName());System.out.println("文件的大小是:" + f1.length());System.out.println("文件的最后一次修改时间是:" + f1.lastModified());//绝对路径:主要指以根目录开始的路径,如c:/ d:/ //相对路径:主要是以当前目录所在的位置开始的路径信息,如./ ../相对路径System.out.println("文件的绝对路径信息是" + f1.getAbsolutePath());System.out.println(f1.delete() ? "文件删除成功" : "文件删除失败");} else {// 3、若文件不存在则创建新的空文件System.out.println(f1.createNewFile()?"文件创建成功":"文件创建失败");}} }
运行结果(一开始,d盘下没有a.txt文件,则首次运行时会创建a.txt文件)
文件创建成功
【此时打开d盘会发现会出现一个名为a.txt的文件,对a.txt进行编辑,手动输入123456;这6个数字,CTRL+C进行内容的保存,然后再次执行这段代码,会显示出对a.txt文件的一些属性信息的相关输出】运行结果如下所示
文件的名称是:a.txt 文件的大小是:6 文件的最后一次修改时间是:1668146689967 文件的绝对路径信息是d:\a.txt 文件删除成功
【这里涉及到最后一次修改时间,因为输出是以毫秒为计量单位,这里我们对时间的输出做一下处理,让它显示我们常见的形式,这里用到了SimpleDateFormat类】代码如下
public class FileTest {public static void main(String[] args) throws IOException {// 1、构造File类型的对象与d:/a.txt关联File f1 = new File("d:/a.txt");// 2、若文件存在则获取该文件的相对特征信息并打印后删除文件if (f1.exists()) {System.out.println("文件的名称是:" + f1.getName());System.out.println("文件的大小是:" + f1.length());Date d1=new Date(f1.lastModified());SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("文件的最后一次修改时间是:" + sdf.format(d1));//绝对路径:主要指以根目录开始的路径,如c:/ d:/ //相对路径:主要是以当前目录所在的位置开始的路径信息,如./ ../相对路径System.out.println("文件的绝对路径信息是" + f1.getAbsolutePath());System.out.println(f1.delete() ? "文件删除成功" : "文件删除失败");} else {// 3、若文件不存在则创建新的空文件System.out.println(f1.createNewFile()?"文件创建成功":"文件创建失败");}} }
运行效果
文件的名称是:a.txt 文件的大小是:6 文件的最后一次修改时间是:2022-11-11 14:22:26 文件的绝对路径信息是d:\a.txt 文件删除成功
可以发现时间变为文件最后一次被修改的时间啦~
(4)目录操作
4.1单层目录操作
File f2 = new File("d:/qi");if (f2.exists()) {System.out.println("目录名称是" + f2.getName());System.out.println(f2.delete() ? "目录删除成功" : "目录删除失败");} else {System.out.println(f2.mkdir() ? "目录创建成功" : "目录创建失败");}
运行结束后会在D盘下出现以qi命名的目录啦~
4.2多层目录操作
public class File_Content操作 {public static void main(String[] args) {File f2 = new File("d:/q/q/^_^");if (f2.exists()) {System.out.println("目录名称是" + f2.getName()); // System.out.println(f2.delete() ? "目录删除成功" : "目录删除失败");} else {//创建单层目录 // System.out.println(f2.mkdir() ? "目录创建成功" : "目录创建失败");//创建多层目录System.out.println(f2.mkdirs()?"目录创建成功":"目录创建失败");}} }
运行结果
显示目录创建成功,回到d盘会发现一个层级目录最里面是一个笑脸命名的文件目录^_^
如下图所示:
【我们在创建层级目录时可以直接创建,但在删除目录时,如果是空目录(单层)则直接删除,如果是多层目录只能利用delete方法从最底层递归进行删除啦~~Java官方没有提供一次删除多层目录的方法,原因之一也是为了安全进行考虑,避免误删操作,因为在代码中运行删除时不经过回收站,所以想再恢复会很难,所以如果真的需要层级一次删除多个目录时,只有我们自己再进行编写相关代码,Java官方没有提供这样的方法。】
(5)目录遍历
需求1:将指定目录下的所有内容打印出来【目录结构如下图所示】
代码如下
//实现将指定目录中的所有内容进行打印出来File f3=new File("d:/q/q/");//获取目录f3下的所有内容并记录到一维数组中File[]firstArray=f3.listFiles();//遍历数组for (File tf:firstArray) {String name=tf.getName();//判断是否是文件,若是则直接打印文件名称if (tf.isFile()) {System.out.println(name);}//若是目录,则使用[ ]将目录名称括起来if (tf.isDirectory()) {System.out.println("["+name+"]");}}
运行效果
a.txt b.txt C.avi [^_^]
需求2:实现目录中所有内容获取的同时进行过滤
两种实现方法:
【接口类型的引用,作为方法的形参是实参的传递方式:
(1)实现类 【下面代码 1中所示】
(2)匿名类,java8中可以用lambda表达式【下面代码2所示】
匿名内部类的语法格式:接口/父类类型 引用变量名=new 接口/父类类型(){方法的重写}】
文件目录如下
代码1如下
FileFilter fileFilter = new FileFilter() {@Overridepublic boolean accept(File pathname) {//若文件名是以.mp3结尾的,则返回True表示保留,否则返回flase就是表示丢弃return pathname.getName().endsWith(".mp3");}};File[] fileArray2 = f3.listFiles(fileFilter);for (File tf : fileArray2) {System.out.println(tf);}
运行结果
d:\q\q\李荣浩-年少有为.mp3
d:\q\q\林俊杰-黑夜问白天.mp3
代码2如下【对上述代码中利用Lambda表达式】
File f3 = new File("d:/q/q/");//Lambda表达式格式:(参数列表)->{方法体}FileFilter fileFilter=(File pathname)->{return pathname.getName().endsWith(".mp3");};File[] fileArray2 = f3.listFiles(fileFilter);for (File tf : fileArray2) {System.out.println(tf);}
运行结果
d:\q\q\李荣浩-年少有为.mp3
d:\q\q\林俊杰-黑夜问白天.mp3
【此处采用匿名类,涉及到lambda的使用,下面是对Java中的lambda表达式的简单介绍】
(1)Lambda表达式概述:Lambda表达式是JDK1.8之后的一种语法,是一个匿名函数,是对匿名函数的简写形式,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递),可以写出更简洁、更灵活的代码。
(2)Lambda表达式语法
JDK1.8之后引入的一种语法,他的写法是使用一个->
符号,箭头将Lambda表达式分为左右两部分,左边写的是实现的这个接口中的抽象方法中的形参列表,右边就是对抽象方法的处理。
实现的这个接口中的抽象方法中的形参列表 -> 抽象方法的处理
(3)Lambda表达式注意事项
Lambda表达式不是万能的,他需要函数式接口的支持;
函数式接口;
函数式接口的定义是: 只包含一个抽象方法的接口,称为函数式接口;
其实我们的Lambda表达式就是对函数式接口的一种简写方式,所以只有是函数式接口,我们才能用Lambda表达式;再换句话说,Lambda表达式需要函数式接口的支持,那函数式接口我们可以自己定义,当然JDK1.8也给我们提供了一些现成的函数式接口。
例如自定义的函数式接口:
@FunctionalInterfacepublic interface MyInterFace<T>{//函数式接口中只能有一个抽象方法void getValue(T t);}//自定义的函数式接口的Lambda 表达式MyInterFace<String>face=(x)->System.out.println(x);
当然了,具体的一些Lambda的简单例子,大家可以去菜鸟上去看一下~链接如下啦~~~
Java Lambda 表达式 | 菜鸟教程 (runoob.com)
File类之文件目录常用操作相关推荐
- 编写一个文件目录常用操作的类
今天对自己以前写的一些常用的组件整理了一下,发现对文件目录的操作的一个类还用的比较多,于是对他进行了修改,一些方法是为在社区中看到有网友提问增加的,包括复制目录的文件和子目录,移动目录文件和子目录,生 ...
- Map集合 File类 递归 序列化 常用类 进程线程 死锁
一.Map集合 将键映射到值得对象,键得值不能重复,一个键可以对应最少一个值. Map接口下的封装好得实现类 –|HashMap –|TreeMap 1.Map接口下的方法 增://将指定得值与该映射 ...
- File类对文件的操作应用
1.在不存在的文件夹下创建文件 //在当前模块下aaa文件下ddd下eee中创建一个e.txt文件 public class Demo2 {public static void main(String ...
- 【数据结构Python描述】手动实现一个list列表类并分析常用操作时间复杂度
文章目录 一.使用动态数组实现列表 1. 动态数组概念引入 2. 验证列表实现策略 3. 动态数组算法实现 二.摊销法分析时间复杂度 1. 摊销法使用示例 2. 数组容量指数增长 3. 数组容量等差增 ...
- JSP中的文件操作:数据流、File类、文件浏览、目录操作、上传下载
文件可以永久地存储信息,从本质上讲文件就是存放在盘上的一系列数据的集合.应用程序如果想长期保存数据,就必须将数据存储到文件中,这就涉及到文件的操作.而在编写网站应用程序的过程中,有许多地方要对文件 ...
- java中的IO操作之File类
Java的集合框架: 类和接口存在于java.util包中. Java的IO: 类和接口存在于java.io包中. 学习方法: 文档在手,天下我有! --------- ...
- 【Java】(二十四)File类(文件操作,文件夹操作,FileFilter接口);Properties属性集合
继续上一章,学习JavaIO框架 [Java](二十三)IO框架:流的概念与分类,字节流(对象流[序列化.反序列化]),编码方式,字符流(打印流,转换流) 上一节的学习(字节流,字符流)都是对文件内容 ...
- Java的File类
File类的理解 常用构造器 常用方法 代码示例 练习 File类的理解 1.File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹) 2.File类声明在java.io中 3.File类中涉 ...
- File类(Java)
目录 1.File类定义 2.File类构造方法(常用摘要) 3.练习 4.主要成员方法 1.File类定义 1)File类主要是JAVA为文件这块的操作(如删除.新增等)而设计的相关类. 2)Fil ...
最新文章
- 使用Chrome浏览器和FF浏览器查看ajax发送以及从服务器传回的数据
- gatdata获取曲线_GetData软件使用--获取曲线图中的数据
- python中math isnan,在python中指定一个变量NaN,不用numpy
- boost::mp11::mp_max相关用法的测试程序
- idea中开启Run Dashboard
- 将Java 8流解析为SQL
- 码上用它开始Flutter混合开发——FlutterBoost
- flask ajax 文件上传,python flask使用ajax请求上载文件。文件为空
- 数据 3 分钟 | 阿里云国内市场份额高达40.3%;openGauss、GoldenDB、星环发布数据库最新版本...
- pom.xml mvn package expected START_TAG or END_TAG not TEXT
- Vulkan教程 - 18 阶段性总结
- pocib模板流程图_各单据流程POCIB
- Boss直聘使用技巧 – 求职面试 – 被面技巧
- 爬取github上热门项目并绘制图表
- 樱花的季节,教大家用canvas画出飞舞的樱花树
- KOOK使用过程有杂音如何解决
- Pandas详解十之Dropna滤除缺失数据
- jrebel 反代理服务搭建
- 系统学习iOS动画 —— 渐变动画
- 基于jsp的旅游信息网站的设计