zoukankan      html  css  js  c++  java
  • 异常机制和File类

    异常:

    1.1 基本概念

    • 异常就是"不正常"的含义,在Java语言中主要指程序执行中发生的不正常情况。
    • java.lang.Throwable类是Java语言中错误(Error)和异常(Exception)的超类。
    • 其中Error类主要用于描述Java虚拟机无法解决的严重错误,通常无法编码解决,如:JVM挂掉了 等。
    • 其中Exception类主要用于描述因编程错误或偶然外在因素导致的轻微错误,通常可以编码解决, 如:0作为除数等。

    1.2 异常的分类

    • java.lang.Exception类是所有异常的超类,主要分为以下两种:
    • RuntimeException - 运行时异常,也叫作非检测性异常
    • IOException和其它异常 - 其它异常,也叫作检测性异常,所谓检测性异常就是指在编译阶段都能 被编译器检测出来的异常。

    其中RuntimeException类的主要子类:

    • ArithmeticException类 - 算术异常
    • ArrayIndexOutOfBoundsException类 - 数组下标越界异常
    • NullPointerException - 空指针异常
    • ClassCastException - 类型转换异常
    • NumberFormatException - 数字格式异常
    • 注意: 当程序执行过程中发生异常但又没有手动处理时,则由Java虚拟机采用默认方式处理异常,而默认 处理方式就是:打印异常的名称、异常发生的原因、异常发生的位置以及终止程序。

    语法格式:

    注意事项

    • a.当需要编写多个catch分支时,切记小类型应该放在大类型的前面;
    • b.懒人的写法: catch(Exception e) {}
    • c.finally通常用于进行善后处理,如:关闭已经打开的文件等。

    finally里面如果有return ,有拦截其他return的优先权.

    1.5 异常的抛出

    基本概念:

    • 在某些特殊情况下有些异常不能处理或者不便于处理时,就可以将该异常转移给该方法的调用者, 这种方法就叫异常的抛出。
    • 当方法执行时出现异常,则底层生成一个异常类对象抛出,此时异常代 码后续的代码就不再执行。
    • 语法格式 访问权限 返回值类型 方法名称(形参列表) throws 异常类型1,异常类型2,...{ 方法体; } 如: public void show() throws IOException{}

    方法重写的原则:

    • a.要求方法名相同、参数列表相同以及返回值类型相同,从jdk1.5开始支持返回子类类型;
    • b.要求方法的访问权限不能变小,可以相同或者变大;
    • c.要求方法不能抛出更大的异常; 注意: 子类重写的方法不能抛出更大的异常、不能抛出平级不一样的异常,但可以抛出一样的异常、更小 的异常以及不抛出异常。

           经验分享 若父类中被重写的方法没有抛出异常时,则子类中重写的方法只能进行异常的捕获处理。

                          若一个方法内部又以递进方式分别调用了好几个其它方法,则建议这些方法内可以使用抛出 的方法处理到最后一层进行捕获方式处理。

    1.6自定义异常:

    实现流程 :

    • a.自定义xxxException异常类继承Exception类或者其子类。
    • b.提供两个版本的构造方法,一个是无参构造方法,另外一个是字符串作为参数的构造方法。

    产生异常:  throw new 异常类型(实参);

    异常的声明: throws 异常类型 

    class IlleaglNUmberException extends Exception {
        public IlleaglNUmberException(String message) {
            super(message);
        }
    
        public IlleaglNUmberException(Throwable cause) {
            super(cause);
        }
    }
    
    public class TestException {
        public static void main(String[] args) {
            try {
                System.out.println(divide(10, 0));
            } catch (IlleaglNUmberException e) {
                e.printStackTrace();
            }
        }
    
        public static int divide(int m, int n) throws IlleaglNUmberException {
            try {
                return m / n;
            } catch (ArithmeticException e) {
                throw new IlleaglNUmberException(e);
            }
    
        }
    
    }

    File 类:

    java.io.File类主要用于描述文件或目录路径的抽象表示信息,可以获取文件或目录的特征信息, 如:大小等。

     常用方法:

    测试代码:

    package com.lagou.task16;
    
    import java.io.File;
    import java.io.FileFilter;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.time.LocalDateTime;
    import java.util.Date;
    
    public class FileTest {
    
        // 自定义成员方法实现指定目录以及子目录中所有内容的打印
        public static void show(File file) {
            // 获取目录f3下的所有内容并记录到一维数组中
            File[] filesArray = file.listFiles();
            // 遍历数组
            for (File tf: filesArray) {
                String name = tf.getName();
                // 判断是否为文件,若是则直接打印文件名称
                if (tf.isFile()) {
                    System.out.println(name);
                }
                // 若是目录,则使用[]将目录名称括起来
                if (tf.isDirectory()) {
                    System.out.println("[" + name + "]");
                    show(tf);
                }
            }
        }
    
        public static void main(String[] args) throws IOException {
    
            // 1.构造File类型的对象与d:/a.txt文件关联
            File f1 = new File("d:/a.txt");
            // 2.若文件存在则获取文件的相关特征信息并打印后删除文件
            if (f1.exists()) {
                System.out.println("文件的名称是:" + f1.getName());
                System.out.println("文件的大小是:" + f1.length());
                Date d1 = new Date(f1.lastModified());
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                System.out.println("文件的最后一次修改时间:" + sdf.format(d1));
                // 绝对路径: 主要指以根目录开始的路径信息,如:c:/  d:/   /..
                // 相对路径: 主要指以当前目录所在位置开始的路径信息,如:./  ../   相对路径
                System.out.println("文件的绝对路径信息是:" + f1.getAbsolutePath());
                System.out.println(f1.delete()? "文件删除成功": "文件删除失败");
            } else {
                // 3.若文件不存在则创建新的空文件
                System.out.println(f1.createNewFile()? "文件创建成功": "文件创建失败!");
            }
    
            System.out.println("---------------------------------------------------------");
            // 4.实现目录的删除和创建
            File f2 = new File("d:/捣乱/猜猜我是谁/你猜我猜不猜/死鬼");
            if (f2.exists()) {
                System.out.println("目录名称是:" + f2.getName());
                System.out.println(f2.delete()? "目录删除成功": "目录删除失败");
            } else {
                //System.out.println(f2.mkdir()? "目录创建成功": "目录创建失败");   // 创建单层目录
                System.out.println(f2.mkdirs()? "目录创建成功": "目录创建失败");   // 创建多层目录
            }
    
            System.out.println("---------------------------------------------------------");
            // 5.实现将指定目录中的所有内容打印出来
            File f3 = new File("d:/捣乱");
            // 获取目录f3下的所有内容并记录到一维数组中
            File[] filesArray = f3.listFiles();
            // 遍历数组
            for (File tf: filesArray) {
                String name = tf.getName();
                // 判断是否为文件,若是则直接打印文件名称
                if (tf.isFile()) {
                    System.out.println(name);
                }
                // 若是目录,则使用[]将目录名称括起来
                if (tf.isDirectory()) {
                    System.out.println("[" + name + "]");
                }
            }
    
            System.out.println("---------------------------------------------------------");
            // 6.实现目录中所有内容获取的同时进行过滤
            // 匿名内部类的语法格式:接口/父类类型 引用变量名 = new 接口/父类类型() { 方法的重写 };
            /*FileFilter fileFilter = new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    // 若文件名是以.avi为结尾,则返回true表示保留   否则返回false就是表示丢弃
                    return pathname.getName().endsWith(".avi");
                }
            };*/
            // Lambda表达式的格式:(参数列表) -> {方法体}
            FileFilter fileFilter = (File pathname) -> {return pathname.getName().endsWith(".avi");};
            File[] filesArray2 = f3.listFiles(fileFilter);
            for (File tf : filesArray2) {
                System.out.println(tf);
            }
    
            System.out.println("---------------------------------------------------------");
            // 7.使用递归的思想获取目录以及子目录中的内容
            show(new File("d:/捣乱"));
        }
    }

    时间转换补充:

    LocalDateTime localDateTime = new Timestamp(file.lastModified()).toLocalDateTime();
    DateTimeFormatter dateTimeFormatter =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String format = dateTimeFormatter.format(localDateTime);
    System.out.println(format);

     

    统计c:/windows目录的大小:

     public Long fileSize(File f) {
            File[] files = f.listFiles();
            if (files == null) {
                return 0L;
            }
            Long currentDirSize = 0L;
            for (File file : files) {
                if (file.isFile()) {
                    currentDirSize += file.length();
                }
                if (file.isDirectory()) {
                    currentDirSize += fileSize(file);
                }
            }
            return currentDirSize;
        }
    
        @Test//统计c:/windows目录的大小.
        public void test4() {
            File f = new File("C:/Windows");
            System.out.println(fileSize(f));
        }

    删除文件夹:

    public class DelListFile {
    
        public static  void delFiles(File file){
            File[] files = file.listFiles();
            if(files==null){return;}
            for (File file1 : files) {
                if(file1.isFile()){
                    file1.delete();
                }else {
                    delFiles(file1);
                }
            }
            file.delete();
        }
    
        public static void main(String[] args) {
            File file = new File("D:/Program Files");
            delFiles(file);
    
        }
    }

    拷贝文件夹:

    public class CopyFileList {
    
        public static void cpoyFile(String src,String dsc){
    
            FileInputStream fileInputStream = null;
            FileOutputStream fileOutputStream = null;
            try {
                fileInputStream = new FileInputStream(src);
                fileOutputStream = new FileOutputStream(dsc);
                byte[] buf = new byte[8192];
                int count;
                while ((count = fileInputStream.read(buf)) != -1) {
                    fileOutputStream.write(buf, 0, count);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (fileInputStream != null) {
                    try {
                        fileInputStream.close();
                    } catch (IOException ioException) {
                        ioException.printStackTrace();
                    }
                }
                if (fileOutputStream != null) {
                    try {
                        fileOutputStream.close();
                    } catch (IOException ioException) {
                        ioException.printStackTrace();
                    }
                }
            }
        }
    
        public static void cpoyFileList(String src,String dsc){
            File f1=new File(src);
            File f2=new File(dsc);
            if(!f2.exists()){
                f2.mkdir();
            }
            File[] files = f1.listFiles();
            if(files==null){return;}
            for (File file1 : files) {
                if(file1.isFile()){
                    cpoyFile(file1.getPath(),dsc+"/"+file1.getName());
                }else {
                    cpoyFileList(file1.getPath(),dsc+"/"+file1.getName());
                }
            }
        }
    
        public static void main(String[] args) {
            cpoyFileList("C:\360Downloads\wpcache","C:\360Downloads\test");
        }
    }
  • 相关阅读:
    DrawSVG
    Cool!15个创意的 CSS3 文本效果【下篇】
    分享最新15个加速 Web 开发的框架和工具
    Unsplash.it
    Cool!15个超炫的 CSS3 文本特效【上篇】
    Codrops 实验:使用 Vibrant.js 提取图像颜色
    Javscript调用iframe框架页面中函数的方法
    竞争的残酷性暂时只体现在产业竞争上(老美有发达的制药、农业、军工、金融、航空、航天、石油、化工等产业,还有以芯片为代表的高端服务业)
    Qt元对象(Meta-Object)系统与反射
    安晓辉:程序员在公司没事干时候,做什么好?(产品上想多一点,设计上想多一点,技术上做深一点、做宽一点,思维框架上学多一点)
  • 原文地址:https://www.cnblogs.com/wanghzh/p/14742613.html
Copyright © 2011-2022 走看看