黑马程序员_IO流之异常处理机制与File类

本文详细介绍了Java中的异常处理机制,包括异常的概念、分类、处理方式等,并提供了具体的代码示例。此外,还深入讲解了File类的使用方法,如创建、删除文件和文件夹、获取文件信息等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流------


1. 异常的概述:
异常:	在程序的运行过程中出现的错误就是异常

 异常的分类:	
 		问题:	Throwable
  			严重问题			Error
  			非严重问题		Exception
  					编译期异常:	非RuntimeException
  					运行期异常: 	RuntimeException
  
  main方法中的问题:
  		第一种我们可以对其做处理
  		第二种情况我们没有对其做处理,没有对其做处理,那么就交给JVM处理了.
  
  	jvm处理异常的方式:
  		打印出异常信息以后,并结束程序
 异常的处理方式:
  		第一种: 使用try...catch语句
  		第二种: throws
  
  try...catch语句的格式:
  		完整版:
  			try{
  				可能会出现异常的代码
 			}catch(异常名 变量名){
  				对异常的处理方式 ;
  			}finally {
  				释放资源的代码 ;
  			}
  
  		简化版:
  			try{
  				可能会出现异常的代码
  			}catch(异常名 变量名){
  				对异常的处理方式 ;
  			}
 
 		注意事项:
  			(1)try语句中的代码越少越好
  			(2): 需要在catch语句中做处理,哪怕是一条输出语句也是可以的
 
 try...catch处理异常的第二种格式:
  	try{
  		可能会出现问题的代码 ;
  	}catch(异常名 变量名){
  		对异常的处理方式 ;		
  	}catch(异常名 变量名){
  		对异常的处理方式 ;		
  	}
  	...
  	
  	注意事项:
  		1.如果是多个catch,多个异常是平级的关系,那么不存在先后顺序.如果多个catch中出现了子父类的继承关系,那么父类需要放在最后
  		2.异常信息如果明确了,那么尽量使用明确的异常信息处理
 
 jdk1.7以后对多个异常的处理方式:
  		格式:
  			try	{
  				可能出现异常的代码;
  			}catch(异常名1| 异常名2 | 异常名3... e){
  				处理方式
 			}
  	好处: 简化了代码的书写
  	弊端: 对多个异常的处理方式是一致的
  	注意事项:
  		要求多个异常是平级关系,不能存在子父类的继承关系
 
 编译期异常和运行期异常的区别:
  		编译期异常必须对其处理,如果不处理,程序无法正常运行.
  		运行期异常可以对其处理,也可以不处理
  
  运行期异常的父类是: RuntimeException
  编译期异常的异常是: Exception

运用try...catch进行捕获异常举例
public class ExceptionTest {
	
	public static void main(String[] args){
		
		// 定义一个日期字符串
		String dateStr = "2015-08-10";
		
		// 创建日期格式化类的对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
		
		// 调用方法
		Date date = null ;
		try{
			date = sdf.parse(dateStr) ;
		}catch(ParseException e){
			System.out.println("解析日期字符串出问题了...");
		}
		
		// 输出
		System.out.println(date);
	}
 }

2.异常的第二种处理方式:直接抛出
异常的第二种处理方式:	使用throws
  	throws是用在方法上,作用是用来声明对应的异常.就是我这个方法可能会出现异常, 如果你调用我这个方法
   就需要对这个异常进行处理,如果你不处理,那么你可以继续往外抛
 
 throw的概述:	在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。
  throw和throws的区别:
  		throws: 用在方法上,用来声明这个方法可能存在的异常信息, 也就是说throws后面可能跟多个异常信息,多个异常信息之间使用
  				","隔开
  throw: 使用在方法中,后面给一个异常对象,通过throw抛出一个异常对象.而这个异常对象可以是运行期异常对象,也可是编译期异常对象(如果
  			是编译期异常对象,那么就需要对其处理,而处理方式有两种第一种使用try...catch语句,第二种通过throws给方法添加声明)
 
 finally的特点:被finally控制的语句体始终被执行
  特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))
 
 final,finally和finalize的区别
		  final是一个修饰符: 可以用来修饰类,变量 , 方法
		  		被final修饰的类,不能被子类继承, 被final修饰的变量是一个常量 , 被final修饰的方法不能被子类重写
		  finally: 用在try...catch语句中, 被finally控制的语句一定会执行
		  finalize: 是Object类中的一个方法, 当调用System.gc()方法的时候,会调用该方法完成垃圾的回收
		  
		 如果catch里面有return语句,请问finally的代码还会执行吗?如果会,请问是在return前还是return后。 
		 会执行,在return前
 
  异常的注意事项:
  		a:	子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)	
  		b:  如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常	
  		c:	如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
  
  异常到底如何处理:
  		如果这个异常可以自己处理,那么就尽量不要抛出去,如果自己处理不了,就抛出
 

3.File类的描述
File类: 是文件或者目录的抽象表示形式
  构造方法:
 		public File(String pathname):				把文件或者路径封装成一个文件对象
  		public File(String parent,  String child):	通过父文件路径和子文件/文件夹来创建一个File对象 
  		public File(File parent, String child):		通过父文件对象和子文件/文件夹来创建一个File对象
 
  File文件类中和创建功能相关的方法:
 		public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
		public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
		public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
 
 相对路径和绝对路径:
 		绝对路径: 从盘符开始的路径就是绝对路径
 		相对路径: 不是从盘符开始的路径就是相对路径
 	File类中和删除功能相关的方法:
 		public boolean delete():删除文件或者文件夹
 	delete在删除的时候不走回收站
 
 		在删除的时候不能删除带内容的文件夹,只能删除空文件夹
 
 File类中和重命名相关的方法:
  		public boolean renameTo(File dest):把文件重命名为指定的文件路径
  renameTo特点:
  		如果目标文件和原文件的路径相同,那么就是重命名
  		如果目标文件和原文件的路径不相同 , 就剪切并且重命名
 
 File类中和判断功能相关的方法:
  		public boolean isDirectory():	判断是否是目录
		public boolean isFile():		判断是否是文件
		public boolean exists():		判断是否存在
		public boolean canRead():		判断是否可读
		public boolean canWrite():		判断是否可写
		public boolean isHidden():		判断是否隐藏
 
 File类中和获取功能相关的方法:
  		public String getAbsolutePath():	获取绝对路径
		public String getPath():			获取相对路径
		public String getName():			获取名称
		public long length():				获取长度。字节数
		public long lastModified():			获取最后一次的修改时间,毫秒值
		public String[] list():				获取指定目录下的所有文件或者文件夹的名称数组
		public File[] listFiles():			获取指定目录下的所有文件或者文件夹的File数组 

4.File类的举例:
import java.io.File;
import java.io.FilenameFilter;

/*
*	求:判断E:\IO\file目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
*	分析:
*		a: 把E:\IO\file封装成一个File对象
*		b: 获取以.jpg结尾的文件数组
*		c: 遍历数组,直接输出名称
*	成员方法:
*		public File[] listFiles(FilenameFilter filter)
*		public String[] list(FilenameFilter filter)
*/
public class FileTest {
	
	public static void main(String[] args) {
		
		// 创建File对象
		File file = new File("E:\\IO\\file") ;
		
		// 获取以.jpg结尾的文件数组
		File[] files = file.listFiles(new FilenameFilter(){
			@Override
			public boolean accept(File dir, String name) {
				
				// System.out.println(dir + "---" + name);
//				File f = new File(dir , name) ;
//				boolean flag = f.isFile() && name.endsWith(".jpg") ;
//				return flag;
				
				return new File(dir , name).isFile() && name.endsWith(".jpg") ;
			}
		}) ;
		
		System.out.println("-----------------------------------");
		
		// 遍历数组
		for(File f : files){
			System.out.println(f.getName());
		}
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值