黑马程序员——JAVA之异常与File类

------- http://www.itheima.com" target="blank">android培训http://www.itheima.com"target="blank">java培训、期待与您交流!
 
 
一.异常处理:
	1.基本语法:try...catch
	2.多catch:try...catch...catch...catch
	  注意:每个catch的异常类型可以是"平级的",不分先后顺序;可以可以是"子父关系",父类的必须放在最后;
	3.JDK7的多catch语句:try...catch(异常类型1 |异常类型2 | 异常类型3  e)
	  注意:一定要是"平级关系",不能是"子父关系"
	4.finally语句:
		A:try...catch...finally
		B:特点:无论在try中是否发生异常,都会被执行;
	5.throws和throw:
		A:throws
			1).用在方法声明处;
			2).后面写类名;可以有多个;
			3).如果抛出的是"运行时异常":
				调用处可以不捕获,也可以捕获;
			   非运行时:
				调用处必须捕获;
		B:throw:
			1).用在方法体内;
			2).后面写对象的引用;只能有一个;
			3).运行时:
				a).可以不用声明throws
				b).调用处可以处理,可以不处理;
			   非运行时:
				a).方法必须声明throws这个类型的异常;
				b).调用处必须处理;
		
	6.Throwable的几个常用方法:
		1).getMessage():获取异常信息;
		2).toString():调用重写的toString()方法
		3).printStackTrace():打印堆栈异常;
	7.自定义异常:
		1).我们可以根据我们的业务逻辑,编写我们自己的异常类;
		2).自定义一个类,继承自Exception或其它子类即可;
		3).通常会添加一个带String参数的构造方法:指定异常信息;
	8.子类重写父类方法时:
		无论父类方法是否抛出异常,子类方法都可以不抛出任何异常;
		也可以抛出任何的运行时异常;
		如果父类抛出的是"非运行时异常",子类不能抛出比父类更多的"非运行时异常"
	9.finally关键字及其面试题
		A:finally用于释放资源,它的代码永远会执行。特殊情况:在执行到finally之前jvm退出了
		B:面试题
			a:final,finally,finalize的区别?
			b:如果在catch里面有return,请问finally还执行吗?如果执行,在return前还是后?
	
二.File类:
	1.构造方法:
		public File(String pathname):File file = new File("e:\\demo\\a.txt");
		public File(String parent,String child):File file = new File("e:\\demo","a.txt");
		public File(File parent,String child):File file = new File("e:\\demo");
      File file2 = new File(file,"a.txt");
	2.创建功能
		public boolean createNewFile():
		public boolean mkdir()
		public boolean mkdirs()
	3.删除功能
		public boolean delete()
	4.重命名功能
		public boolean renameTo(File dest)
	5.判断功能
		public boolean isDirectory()
		public boolean isFile()
		public boolean exists()
		public boolean canRead()
		public boolean canWrite()
		public boolean isHidden()
	6.基本获取功能
		public String getAbsolutePath()
		public String getPath()
		public String getName()
		public long length()
		public long lastModified()
	7.高级获取功能
		public String[] list()
		public File[] listFiles()
 
 
三、代码演示
	1.比较常见的try...catch语句
	
<span style="font-family:Microsoft YaHei;font-size:14px;">
import java.util.InputMismatchException;
import java.util.Scanner;

/*
 * 异常处理的基本语句:
 * 
 * ........
 * try{
 * 		//可能会出现异常的代码
 * }catch(异常类型 变量名){
 * 		//如果出现异常了,告诉JVM怎么做--JVM会执行这里面的代码;
 * 		//一般情况下我们在这里做什么:
 * 		1.开发阶段:可以打印异常异常信息,有助于调试;
 * 		2.程序交付使用后:将错误信息写入日志文件;后期供开发人员维护升级使用;
 * }
 * .........
 * 
 * 异常处理机制的执行流程:
 * 
 * 1.执行try中的代码;
 * 2.如果没有发生异常,执行完try后,不执行catch,跳过catch直接执行后续语句;
 *   如果发生异常:
 *   	1).JVM先识别异常;
 *   	2).JVM封装异常;
 *   	3).看我们的代码,有没有相应的catch语句,而且要匹配catch中的"异常类型";
 *   		如果匹配到,执行此catch种的代码,执行完毕后,执行catch的后续语句;
 */
public class Demo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个整数:");
		try{
			int n = sc.nextInt();
			System.out.println(n);
			
		}catch(InputMismatchException e){
			sc = new Scanner(System.in);
		}
	
		System.out.println("程序结束");
		
	}
}
</span>

 

2.throw与throws的用法:

 

<span style="font-family:Microsoft YaHei;font-size:14px;">
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
 * 方法内怎样处理异常:
 * 
 * 1.总原则:在方法内如果发生异常情况,尽量不要"处理",而是抛给调用者去处理;
 * 2.抛出的方式有两种:
 * 	1).在方法声明时,在形参列表之后,使用throws关键字,后面跟一个,或多个异常类型名称;
 * 	   抛出的异常类型:
 * 	   A.运行时异常:调用方 可以不捕获,编译能通过。但是如果真的发生异常,JVM仍然是结束掉程序;
 * 	   B.非运行时异常:调用方法必须捕获,或者抛出;
 * 	2).在方法内部,手动的"抛出"一个"异常对象";使用关键字:throw
 *         抛出的异常类型:
 * 	   A.运行时异常:1.方法可以不声明throws此类型异常;2.调用方可以不捕获;
 * 	   B.非运行时异常:1.方法声明处,必须显示的throws此类型异常;2.调用方必须捕获或者抛出;
 * 				
 */
public class Demo {
	public static void main(String[] args) {
		try{
		//	System.out.println(getMax(null));//getMax()方法抛出的是:运行时异常。调用方可以不捕获,编译能通过;
		//	System.out.println(getMax2(null));
			System.out.println(getMax3(null));
		}catch(NullPointerException e){
			System.out.println("异常信息:" + e.getMessage());
		}
		String str = "2015-09-20";
		
			try {
				Date date = stringToDate(str);//stringToDate()方法抛出的是:非运行时异常。调用方必须捕获,或者抛出;
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
		
	}
	
	public static int getMax(int[] array) throws NullPointerException,
													ArithmeticException,
													ArrayIndexOutOfBoundsException{
		
		int max = array[0];//产生异常,JVM实例化一个NullPointerException对象;
		for(int i = 0;i < array.length ; i++){
			max = array[i] > max ? array[i] : max;
		}
		return max;
		
	}
	//将String转换为Date
	public static Date stringToDate(String str) throws ParseException{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = sdf.parse(str);
		return date;
	}
	
	//测试throw
	public static int getMax2(int[] array){
		try{
			int max = array[0];//产生异常,JVM实例化一个NullPointerException对象;
			for(int i = 0;i < array.length ; i++){
				max = array[i] > max ? array[i] : max;
			}
			return max;
		}catch(NullPointerException e){
			e = new NullPointerException("大哥,你给我传了一个空指针!你这是要害我啊!!");
			throw e;
		}
		
	}
	public static int getMax3(int[] array) {
		if(array == null){
			throw new NullPointerException("空指针异常!");
		}
		int max = array[0];//产生异常,JVM实例化一个NullPointerException对象;
		for(int i = 0;i < array.length ; i++){
			max = array[i] > max ? array[i] : max;
		}
		return max;
		
		
	}
}	
</span>


3.File类批量修改文件

 

<span style="font-family:Microsoft YaHei;font-size:14px;">
import java.io.File;

public class FileDemo_批量修改文件名称 {
	public static void main(String[] args) {
		// 封装目录(创建文件目录)
		File srcFile = new File("E:\\圣思源Java视频\\JavaSE");
		//获取该目录下的所有文件的File数组
		File[] fileArray = srcFile.listFiles();
	//遍历该File数组,得到每一个File对象
		for(File file: fileArray){
			//System.out.println(file);
			//E:\圣思源Java视频\JavaEE\[北京圣思园XML培训视频]_003.XMLSpy详解、有效的XML文档详析(ED2000.COM).rar
			//改后:E:\圣思源Java视频\JavaEE\[XML培训视频]_003.XMLSpy详解、有效的XML文档详析.rar

			String name = file.getName();//[北京圣思园XML培训视频]_003.XMLSpy详解、有效的XML文档详析(ED2000.COM).rar
			if(name.endsWith(".rar")){		
			String str1 = name.substring(name.indexOf("]")+1,name.indexOf("("));
//			System.out.println(str1);//测试
			String str2 = name.substring(name.lastIndexOf("."));
//			System.out.println(str2);//测试
			
			String string = str1.concat(str2);
//			System.out.println(string);//测试
			
			File newFile = new File(srcFile,string);
//			System.out.println(newFile);
			//修改文件名称
			file.renameTo(newFile);
			}
		}

	}

}
</span>


 

4.文件过滤器

<span style="font-family:Microsoft YaHei;font-size:14px;">
import java.io.File;
import java.io.FilenameFilter;

/*
 * 在File中还有两个list()和listFiles()的重载方法:
 * 
 * 	public String[] list(FilenameFilter filter)
 *  public File[] listFiles(FilenameFilter filter
 */
public class Demo {
	public static void main(String[] args) {
		File file = new File("C:\\20150822");
		String[] fileNameArray  = file.list(new FilenameFilter(){
			@Override
			public boolean accept(File dir, String name) {
			//	return false;//全不匹配
			//	return true;//全部匹配
				//写我们自己的匹配逻辑
		//		System.out.println("dir = " + dir + " name = " + name);
				File file = new File(dir,name);//我们需要确定这个File要是一个文件,所以要构造一个File对象
				if(file.isFile() && file.getName().endsWith(".java")){
					return true;
				}
				
				return false;
			}});
		for(String s : fileNameArray){
			System.out.println(s);
		}
		
	}
}
</span>


 

 

 

 

 

 

      


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值