File

1.File:是文件和目录路径名的抽象表示。

2.绝对路径:带盘符的路径。
相对路径:相对某个文件或文件夹来说的路径。
当要描述的文件或目录与参照的文件或目录不在同一个目录下,相对路径==绝对路径。
当要描述的文件或目录与参照的文件或目录在同一个盘符下,相对路径!=绝对路径。

3.File类的常用方法

eg:public static void main(String[] args) {
	//获得文件对象
	//File f1=new File("d:\\a.txt");
	File f1=new File("d:"+File.separator+"a.txt");
	System.out.println("绝对路径:"+f1.getAbsolutePath());
	System.out.println("相对路径:"+f1.getPath());
	System.out.println("文件名:"+f1.getName());
	System.out.println("文件是否可写:"+f1.canWrite());
	System.out.println("文件是否可读:"+f1.canRead());
	System.out.println("文件是否为隐藏文件:"+f1.isHidden());
	System.out.println("文件的长度:"+f1.length());
	SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	System.out.println("文件的最后修改时间:"+sdf.format(f1.lastModified()));
	
	//给file对象重命名
	f1.renameTo(new File("D:\\sx.txt"));
	System.out.println("重命名成功");
	
	//删除文件
	File f2=new File("D:\\sx.txt");
	f2.delete();
	System.out.println("文件删除成功");
	
	//删除目录,只有空目录才可以直接删除
	File f3=new File("D:\\bb");
	f3.delete();
	System.out.println("目录删除成功");
}

4.过滤器:把想要的数据留下,把不想要的数据过滤掉。

eg:/**
 * 过滤器类
 * @author sx
 * @version 1.0 2019年7月4日
 */
public class MyFileFilter4 implements FileFilter{
	/**
	 * 过滤方法
	 */
	@Override
	public boolean accept(File pathname) {
		//将以.txt结尾的文件留下,其他的过滤掉
		if (pathname.getName().endsWith(".txt")) {
			return true;
		}else {
			return false;
		}
	}
}

public static void main(String[] args) throws IOException {
		//获得文件对象
		File f1=new File("aa");
		//判断当前的目录是否存在
		if (f1.exists()) {
			//获得当前目录下的所有子目录和子文件,将过滤器对象作为方法的参数
			File[] fs=f1.listFiles(new MyFileFilter4());
			for (File f2 : fs) {
				System.out.println(f2.getPath());
			}
			
		} else {
			System.out.println("当前的目录不存在");
		}
	}

5.递归:方法自身调用自身。
5.1:将原问题拆分为若干个子问题,子问题的解决方法与原问题一样。
5.2:原问题的解决依赖于所有子问题的解决。
5.3:递归要有出口。
eg:/**

  • 需求3:输出指定目录下的所有文件信息,比如打印当前项目根目录下的所有文件信息(只考虑当前目录,不考虑子目录)
    需求改进:
  1. 要求只输出文件后缀名为txt的文件

  2. 根据API的过滤器来完成该功能

  3. 需求继续跟进,列出当前目录及子目录中符合该条件的文件信息(递归)

  4. 递归:方法里面调用方法自身

    * @author sx
    * @version 1.0 2019年7月4日
    */
    public class FileTest5 {
    public static void main(String[] args) throws IOException {
    //获得文件对象
    	File f1=new File("aa");
    	//调用方法
    	digun(f1);
    }
    
    /**
     * 获得当前目录下所有符合要求的文件 方法
     */
    public static void digun(File f) {
    	//判断当前的目录是否存在
    	if (f.exists()) {
    		//获得当前目录下的所有子文件或子目录
    		File[] fs=f.listFiles();
    		//遍历所有子文件或子目录
    		for (File f2 : fs) {
    			//如果当前的对象是文件还是目录
    			if (f2.isFile()) {//文件
    				//判断当前文件是否是以.txt结尾
    				if (f2.getName().endsWith(".txt")) {
    					System.out.println(f2.getPath());
    				}
    			} else {//目录
    				digun(f2);
    			}
    		}
    	} else {
    		System.out.println("当前的目录不存在");
    	}
    }
    

    }

6.异常:是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。

7.异常的分类
7.1:异常的总根类:throwable
7.1.1:错误(Error):JVM系统内部错误或资源耗尽等严重情况-属于JVM需要负担的 责任这一类异常事件无法恢复或不可能捕获,将导致应用程序中断。
7.1.2:异常(Exception):由于程序设计不合理或者偶然的外界因素导致的异常。
7.1.2.1:检查异常(非运行时异常):由于偶然的外界因素而导致的异常。
特征:检查异常是在代码写完就报一条红线。eg:IOException
7.1.2.2:运行时异常(非检查异常):由于程序设计不合理导致的异常.
eg:NullPointException,ArrayIndexOutOfBoundsException,ArithmeticException

8.异常处理机制:Java语言使用异常处理机制为程序提供了异常处理的能力。
8.1:捕获异常:适用于任何出异常的场景。
8.1.1:捕获异常的语法:
try{
可能会出异常的代码;
}catch(异常类型1|异常类型3 变量名1){
出现异常类型1时的解决的代码;
}catch(异常类型2 变量名2){
出现异常类型2时的解决的代码;
}finally{
关闭对象释放资源的代码;(一定会执行除非System.exit()不执行)
}
8.1.2:语法特点:
8.1.2.1:try-catch结构中try块有且仅有一个;
8.1.2.2:try-catch结构中catch块有0个到多个;catch块至少执行0个,至 多执行1个;如果有多个catch块,小异常写在前面,大异常写在后 面;一个catch块中可以写多个异常类型,它们之间用|分隔;
8.1.2.3:try-catch结构中,finally可以有0个到多个;
finally中代码一定会执行,除非遇到System.exit().
finally的优先级高于return.

eg:public static void main(String[] args) {
		try {
			System.out.println("开始执行程序");
			int num=8/0;
			System.out.println("结束执行程序");
			//System.exit(0);
			//return;
		}catch (ArithmeticException|NullPointerException e) {
			//打印异常信息
			e.printStackTrace();
		}catch (Exception e) {
			System.out.println("2出异常了");
		}finally {
			System.out.println("这是finally块");
		}
	}
						
	public static void main(String[] args) {
	//声明一个变量作标记
	boolean flag=false;
	do {
		Scanner input=new Scanner(System.in);
		//重置标记
		flag=false;
		try {
			System.out.println("请输入一个整数:");
			int num=input.nextInt();
			System.out.println("输入的数为:"+num);
		} catch (InputMismatchException e) {
			System.out.println("你的输入有误,请重新输入");
			//出异常改变标记
			flag=true;
		}catch (Exception e) {
			e.printStackTrace();
		}
	}while(flag==true);
}

8.2:抛出异常类型:适用于当前的异常自己解决不了,就抛出给调用者。eg:检查异常。
作用:提醒调用者这个方法可能会出异常。
8.2.1:抛出异常的语法:
public 返回值类型 方法名(形参列表) throws 异常类型1,异常类型2{
方法体;

		eg:public static void main(String[] args) throws IOException {
	//获得文件对象
	File f1=new File("d:\\bb\\cc\\aa\\b.txt");
	
	//获得当前文件的父目录
	File parentFile=f1.getParentFile();
	//判断父目录是否存在,如果不存在,就创建父目录
	if (parentFile.exists()==false) {
		parentFile.mkdir();//只能创建一级目录
		parentFile.mkdirs();//创建多级目录
	}
	
	//判断文件是否存在,如果不存在,就创建文件
	if (f1.exists()==false) {
		f1.createNewFile();
		System.out.println("文件创建成功");
	}else {
		System.out.println("文件已存在");
	}
}
	
8.3: 抛出异常对象:适用于由于用户不合理操作而导致的异常。
	8.3.1:语法:在方法中用 throw 异常对象;
	8.3.2:抛出异常对象一般和throws或者try-catch结构一起用,不能单独使用。
		eg:public static void main(String[] args) throws Exception {
	Scanner input=new Scanner(System.in);
	try {
		System.out.println("请输入一个整数:");
		int num=input.nextInt();
		System.out.println("输入的数为:"+num);
	} catch (Exception e) {
		//抛出异常对象
		throw new Exception("你的输入有误");
	}
}

public static void main(String[] args) {
	Scanner input=new Scanner(System.in);
	try {
		System.out.println("请输入一个整数:");
		int num=input.nextInt();
		System.out.println("输入的数为:"+num);
	} catch (Exception e) {
		//抛出异常对象
		try {
			throw new Exception("你的输入有误");
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
}

9.自定义异常:适用于当系统的异常类型无法满足需要,就可以自定义异常。

eg:/**
 * 自定义异常类,继承Exception
 * @author sx
 * @version 1.0 2019年7月4日
 */
public class MyInputException extends Exception{
	/**
	 * 自定义异常类的构造方法
	 * @param message
	 */
	public MyInputException(String message) {
		super(message);
	}
}

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		try {
			System.out.println("请输入一个整数:");
			int num=input.nextInt();
			System.out.println("输入的数为:"+num);
		} catch (Exception e) {
			//抛出自定义的异常对象
			try {
				throw new MyInputException("333333333你的输入有误");
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值