IO流(异常类和File类)

何为Io流?
IO流用来处理设备之间的数据传输,上传文件和下载文件。

1.异常类

在这里插入图片描述
(1)Throwable类

Throwable类的常用方法概述
getMessage()获取异常信息,返回字符串。
toString()获取异常类名和异常信息,返回字符串
printStackTrace()获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。

(2)异常处理的两种方式

  • try…catch…finally自己捕获处理
try {
  可能出现问题的代码 ;
 }catch(异常名 变量名){
  针对问题的处理 ;
 }finally{
  释放资源;
 }
  • throws 抛给调用者
    使用Alt+Enter万能纠错

注意:多个异常之间只能是平级的关系,不能出现子父类的继承关系

  • java中的异常发生之后如果一直往上抛,抛给main,会调用JVM终止程序
  • 对异常没有捕捉,采用上报的方式,此方法的后续代码不执行
  • catch写多个的时候,从上到下,必须遵守从小到大
  • JDK8之后,catch可以采用或的方式: catch(异常|异常|异常 e)

(3)throw与throws之间的区别

  • throws
    用在方法声明后面,跟的是异常类名
    可以跟多个异常类名,用逗号隔开
    表示抛出异常,由该方法的调用者来处理
    throws表示出现异常的一种可能性,并不一定会发生这些异常
  • throw
    用在方法体内,跟的是异常对象名
    只能抛出一个异常对象名
    这个异常对象可以是编译期异常对象,可以是运行期异常对象
    表示抛出异常,由方法体内的语句处理
    throw则是抛出了异常,执行throw则一定抛出了某种异常

(4)final,finally和finalize之间的区别

  • final:是一个状态修饰符, 可以用来修饰类 , 变量 , 成员方法.
    修饰的类不能被子类继承
    修饰的变量其实是一个常量不能被再次赋
    修饰的方法不能被子类重写
  • finally:用在try…catch…语句中 , 作用: 释放资源 . 特点: 始终被执行(JVM不能退出)
  • finalize: Obejct类中的一个方法,用来回收垃圾
    注意:
    被finally控制的语句体一定会执行(前提 jvm没有停止),如果jvm虚拟机在finally之前停止,那便不会执行(比如System.exit(0))

(5)自定义异常:生活中我们无法描述的异常

注意:需要将我们自定义的异常类纳入到我们的异常体系中
继承自Exception
继承自RuntimeException

例如:银行取钱

public class MyTest {
    public static void main(String[] args) {
        int num = 100;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的取款金额");
        int money = scanner.nextInt();
        if (money <= num) {
            num -= money;
        } else {
            throw new NoMoneyException("余额不足");
        }
    }

}
public class NoMoneyException extends RuntimeException{

    public NoMoneyException(String msg) {
        super(msg);
    }
}

(6)finally面试题分析

public class ExceptionText  {
    public static void main(String[] args) {
        int m = m();
        System.out.println(m);
    }
    public static  int m(){
            int i=100;
            try {
                return i;

            }finally {
                i++;
            }
        }
    }

运行结果为:100

因为java遵循自上而下的运行规则,还遵守return语句一旦执行,方法结束的原则,为了使代码遵守这两个规则,在编译时进行了更改
经过反编译的代码是:
int i=100;
int j=i;
i++;
System.out.println(j);
所以:运行结果为100

2.File类:文件和目录路径名的抽象表示形式

(1)File类的功能

File类的方法概述
public boolean createNewFile()创建一个新的文件
public boolean mkdir()创建单级文件夹
public boolean mkdirs()创建多级文件夹
public boolean delete()删除文件或者文件夹
public boolean renameTo(File dest)把文件夹重命名
public boolean isDirectory()判断是否是目录
public boolean isFile()判断是否是文件
public boolean exists()判断是否存在
public boolean canRead()判断是否可读
public boolean canWrite()判断是否可写
public boolean isHidden()判断是否隐藏
public boolean isAbsolute()判断是否用的绝对路径
public String getAbsolutePath()获取绝对路径
public String getPath()获取相对路径
public String getParent()返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
public long lastModified()获取最后一次的修改时间,毫秒值
public String getName()获取名称
public String[] list()获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles()获取指定目录下的所有文件或者文件夹的File数组
public File getParentFile()返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。

(2)File类的文件名称过滤器的概述和使用

public String[] list(FilenameFilter filter) 返回String类型
public File[] listFiles(FilenameFilter filter) 返回File类型

举例:
判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称

import java.io.File;
import java.io.FileFilter;
public class Home {
        public static void main (String[] args) {
            File file =new File("c:\\Users\\文帝\\Desktop");
           File []a= file.listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                   if (pathname.getName().endsWith(".jpg")){
                       return true;
                   }else {
                       return false;
                   }
                }
            });
            for (File file1 : a) {
                System.out.println(file1.getName());
            }
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贫僧洗发爱飘柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值