学IO流前的两个知识点:异常和文件

学习IO流的两个需要知道的知识点

I/O流

输入输出流,用来处理设备之间的数据传输。

文件是数据局的载体。在传输文件的过程中,会出现各种各样的异常。所以我们要学会处理问题。

异常

Java中的异常:Throwable问题(父类):

  1. Error错误:严重性问题,我们处理不了。

  2. Exception异常(一般性问题,我们可以处理):

    1. 运行期异常:发生在运行期间,可以解决,也可以不解决。

      1. 运行期异常是JVM在处理,JVM默认处理方法是:打印异常的信息,然后停掉虚拟机,往后的代码不执行。

      2. 显然默认处理方法不是很完美,所以我们可以自己来处理运行期异常:使用关键字try和catch(试图捕获),使得往后的程序得到运行。

      3. try的{}中放的是有可能出现异常的代码;不会出现异常的代码尽量不要放进去。

      4. catch的{}中放的是try中的代码一旦出现异常的时候执行的代码。catch的()中放的是异常类名,就是需要捕获的异常类型。

        1.7之后()中可以用|隔开多个异常,不过不建议这样写,因为这种方法遇到不同的异常的处理结果和方法都是一样的,分不开来。

      5. 在捕获异常的同事能明确的就不要用顶层父类Exception在catch的()中标注。

      6. 如果有捕获多个异常,那么多个异常之间存在异常关系,父类异常放在最后,并列关系的异常,先后顺序无所谓。

      7. 不要做空处理,所有的异常都要处理。一般情况简单的处理方法是打印异常的堆栈信息。

      8. 常见的写法还可以看到finally{},不论有没有异常finally中的都会执行;一般我们会采用在finally的{}中放一些收尾功能,比如清理内存。finally可以不加。

    2. 编译期异常:发生在编译期间,必须处理,不解决就无法编译和运行。

      1. 编译期异常第一种处理方法是:throw:把错误抛给调用者,俗称甩锅。一般情况下在main方法下就不在甩锅,用捕获处理。

      2. 捕获处理:try{}catch(){}。

      3. throws:不同于throw抛出的异常一定发生了,throws抛出的方法不一定发生,并且throws用在方法的声明上。throw抛出的是一个异常对象,throws抛出的是一个异常类名,可以抛出多个,而且可以抛出编译期异常和运行。

    3. 注意事项:
      1.子类在重写父类的方法时,父类方法没有抛出异常,那么子类就不能抛出异常,有异常只能捕获。

      2.父类方法有抛出异常,那么子类可以抛出和父类一样或比父类异常小的异常。

      3.子类不能抛出父类没有抛出的异常。

全选有错的一行Ctrl+Alt+t自动生成捕获异常

Java中提供的异常不够我们用,所以我们可以建立一个异常继承Java的expection来完成我们需要的自定义异常

文件

电脑上的数据都是以文件的形式来体现的,IO流传输的数据就是传文件,所以Java提供了一个film类用来描述文件和文件目录路径。

  1. 封装文件或目录使用:new film();

  2. 路径:用/隔开

    1. 绝对路径:从盘符号开始写的,有详细的路径。

    2. 相对路径:不带盘符号的路径。(发给别人时候用相对路径比较合适,收到的人可以不用改路径。一般用次路径找文件)

      ./:当前路径某个文件

      …/:上级路径某个文件

    3. 可以写一个父路径再写一个子路径防止子路径 变更。

    4. 父路径可以用一个文件名代替。

  3. 创建目录:对象名.mkdir返回值是目录是否创建成功,创建成功返回true,重复常见返回false。只能创建单级目录。

    创建多级目录:对象名.mkdirs创建多级目录,返回值和mkdir相同。

  4. 创建文件:对象名.createNewFilm

  5. 删除:调delete方法(删除空目录和文件)
    先封装,再调用删除,重复删除返回false。

  6. 递归删除

    public class ZuoYe {
            public static void main(String[] args) {
                //删除多级目录
                File f = new File("E:\\photo");//包装路径:File可以包装路径或文件
                for (File ff : f.listFiles()) {
                    if (ff.isFile()){
                        ff.delete();
                    }else if (ff.isDirectory()){
                        diguiShanchu(ff.getAbsolutePath(),ff);
                    }
                }
                boolean delete = f.delete();
                System.out.println(delete);
            }
            //用递归的方法进行删除,创建递归方法
        private static void diguiShanchu(String absolutePath,File f) {
            for (File ff : f.listFiles()) {
                if (ff.isFile()){
                    ff.delete();
                }else if (ff.isDirectory()){
                    diguiShanchu(ff.getAbsolutePath(),ff);
                }
            }
            boolean delete = f.delete();
            System.out.println(delete);
        }
    }
    
  7. 改名字:(还有剪切功能).renameTo。(当改名的文件和传过去的文件在同一目录下,就是改名字;如果不在同一目录下就是剪切重命名。)

  8. 判断文件或目录是否存在:封装的文件或目录的名称.exists

  9. 判断封装的东西是不是文件夹isfilm

  10. 判断封装的是不是文件isdirectory

  11. 判断文件是刻度还是可写:canread和canwrite还有ishidden

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值