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() {
 
			@Override
			public 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也给我们提供了一些现成的函数式接口。


例如自定义的函数式接口:

    @FunctionalInterface
	public interface MyInterFace<T>{
	//函数式接口中只能有一个抽象方法
		void getValue(T t);
	}
	//自定义的函数式接口的Lambda 表达式
	MyInterFace<String>face=(x)->System.out.println(x);

当然了,具体的一些Lambda的简单例子,大家可以去菜鸟上去看一下~链接如下啦~~~

Java Lambda 表达式 | 菜鸟教程 (runoob.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值