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");
        }
    }
  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/wanghzh/p/14742613.html
Copyright © 2011-2022 走看看