Java学习第十二天 File类

File类的常用方法

File类内部封装的路径可以指向一个文件,也可以指向一个目录,在File类中提供了针对这些文件或目录的一些常规操作。

File类的常用的构造方法

	File(String pathname)
		根据将给定路径名字符串转换为抽象路径名来创建一个新File实例
		
	File(File parent,String child)
		根据parent抽象路径名和child路径名字符串创建一个新的File实例
		
	File(String parent,String child)
		根据parent路径名字符串和child路径名字符串创建一个新的File实例

File类的常用方法,用于判断文件是否存在、创建、删除文件/目录等

  • 文件操作相关的方法

      public boolean createNewFile()   创建文件,如果文件存在,就不创建
      punlic boolean delete()	Java中的删除不走回收站,注意文件夹内不能包含文件或者文件夹
    
  • 目录操作相关的方法

      public boolean mkdir() 创建文件夹,如果存在,就不创建
      public boolean mkdirs() 创建文件夹,可以递归创建
      public String[] list[]	列出File对象的所有子文件名和路径,返回String数组
      public File[] listFiles()  列出File对象的所有子文件和路径,返回File数组
    
  • 文件检测相关的方法

      public boolean isDirectory()  判断是否目录
      public boolean isFile()	判断是否是文件
      public boolean exists()	判断是否可读
      public boolean canRead() 判断是否可读
      public boolean canWrite()	判断是否可写
      public boolean isHidden()	判断是否隐藏
    
  • 基本获取功能

      public String getAbsolutePath()		获取绝对路径
      public String getPath()		获取相对路径
      public String getNamee()	获取名称
      public long lenght()	获取长度,字节数			
      public long lastModified()	获取最后一次修改时间,毫秒值
      需要格式化时间SimpleDateFormat()
    
  • 重命名

      public boolean renameTo(File dest)
      如果路径名相同,就是改名
      如果路径名不同,就是改名剪切
      路径以盘符开始:绝对路径 H:\\
      路径不以盘符开始:相对路径 xx.ma4
    

案例:

public class Example01 {
	public static void main(String[] args) {
		File file = new File("example.txt");
		//获取文件名
		System.out.println("文件名是: "+file.getName());
		//获取文件的相对路径
		System.out.println("文件的绝对路径是:"+file.getAbsolutePath());
		//获取文件的绝对路径
		System.out.println("文件的相对路径是:"+file.getPath());
		//获取文件的父路径
		System.out.println("文件的父路径是:"+file.getParent());
		//判断文件是否可读
		System.out.println("文件是否可读:"+file.canRead());
		//判断文件是否可写
		System.out.println("文件是否可写:"+file.canWrite());
		//判断是否是一个文件
		System.out.println("是否是一个文件:"+file.isFile());
		//判断是否是一个目录
		System.out.println("是否是一个目录:"+file.isDirectory());
		//判断是否是一个绝对路径
		System.out.println("是否是一个绝对路径:"+file.isAbsolute());
		//得到文件最后修改时间
		System.out.println("文件的最后修改时间:"+file.lastModified());
		//得到文件的大小
		System.out.println("文件的大小:"+file.length());
		//是否成功删除文件
		System.out.println("是否成功删除文件:"+file.delete());
	}
}
遍历目录下的文件

list() 方法用于遍历某个指定目录下的所有文件的名称,接下来通过一个案例来演示list()方法的用法

public class Example02 {

	public static void main(String[] args) {
		File file = new File("C:\\Users\\DELL\\Desktop\\JAVA课件");
		if(file.isDirectory()) {	//判断File对象对应的目录是否存在
			String[] list = file.list();	//获取目录下的所有文件的文件名
			for (String name : list) {
				System.out.println(name);
			}
		}
	}
}
过滤器的使用

File类中提供了一个重载的list(FilenameFilter filter)方法,该方法接受一个FilenameFilter类型的参数。FilenameFilter 是一个接口,被称作文件过滤器,当中定义了一个抽象方法accept(File dir,String name)。在调用list()方法时,需要实现文件过滤器FilenameFilter ,并在accept()方法中做出判断,从而获得指定类型的文件

public class Example01 {
	public static void main(String[] args) {
		File file = new File("C:\\Users\\DELL\\Desktop\\JAVA课件");
		//创建过滤器方法
		FilenameFilter filter = new FilenameFilter() {
			//实现accept()方法
			@Override
			public boolean accept(File dir, String name) {
				File currFile = new File(dir, name);
				//如果文件名以.md结尾返回true,否则返回false
				if(currFile.isFile() && name.endsWith(".md")) {
					return true;
				}else {
					return false;
				}
			}
		};
		if(file.exists()) {	//判断File对象对应的目录是否存在
			String[] lists = file.list(filter);		//获得过滤后的所有文件名的数组
			for (String name : lists) {		
				System.out.println(name);
			}
		}
	}
}

遍历所有目录下的文件

listFile() 方法返回一个File对象数组,当对数组中的元素进行遍历时,如果元素中还有子目录需要遍历,则需要使用递归。接下来通过一个案例实现遍历指定目录下的文件

public class Example03 {
	public static void main(String[] args) {
		File file = new File("C:\\usr");
		fileDir(file);		//调用fileDir()方法
	}
	private static void fileDir(File dir) {
		File[] files = dir.listFiles();		//获取表示目录下所有文件的数组
		for (File file : files) {			//遍历所有的子目录和文件
			if(file.isDirectory()) {
				fileDir(file);				//如果是目录就调用fileDir()方法,否则输出
			}
			System.out.println(file.getAbsolutePath());
		}
	}
}
删除文件及目录

在操作文件时经常要删除一个目录下的某个文件或者整个目录,这时需要使用File类的delete()方法

删除单个文件

public class Example01 {
	public static void main(String[] args) {
		File file = new File("D:\\test");
		if(file.exists()) {
			file.delete();
			System.out.println("删除成功");
		}
	}
}

删除单个目录

public class Example02 {
	public static void main(String[] args) {
		File file = new File("D:\\test");		//创建一个代表目录的File对象
		deleteDiir(file);			//调用deleteDir删除方法
	}
	private static void deleteDiir(File file) {
		if(file.exists()) {			//判断传入的File文件是否存在
			File[] listfile = file.listFiles();		//得到File数组
			for (File file2 : listfile) {		//遍历所有子目录和文件
				if(file.isDirectory()) {
					deleteDiir(file2);		//如果是目录,递归调用deleteDiir()
				}else {
					//如果是文件,直接删除
					file2.delete();
				}
			}
		}
		//删除完最后一个目录里的所有文件后,就删除这个目录
		file.delete();
	}
}

需要注意的是,在Java中删除是从虚拟机直接删除而不走回收站,文件一旦删除就无法恢复,因此在进行删除操作的时候需要格外小心。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值