JAVA入门————异常 AND IO流 AND File类

异常

  • 概念:Java程序在运行中出现的错误
  • 异常的基类——Throwalbe基类
  • Error错误:严重问题 内存溢出 无法解决
  • Ecxeption异常:非严重问题 可以解决 异常分为两种 运行期异常和编译期异常
  1. 运行期异常 RuntimeException——发生在程序运行过程中,可以解决也可以不解决 不影响程序的编译
  2. 编译期异常 非 RuntimeException——发生在程序编译过程中,必须解决,否则程序无法进行运行

运行期异常

  eg:	int a  = 10;
        int b = 0;
        System.out.println(a/b);————运行期异常
        ——————ArithmeticException(算术异常):当出现异常的运算条件时,抛出此异常。
        ——————eg:一个整数“除以零”时,抛出此类的一个实例。 
  • 运行期异常的默认处理方式——抛给JVM处理:打印异常的栈堆信息 然后退出
  • 若想改变异常的处理方式 使用关键字 try()catch()
try{ }catch(){ }
  • try里面放的是 可能会出现异常的代码 若出现异常 才会运行catch里的代码
 eg:	int a  = 10;
        int b = 0;
        try{
            System.out.println(a/0);
        }catch(ArithmeticException e){
            System.out.println("除数为0,算法不成立!");
        }catch (NullPointerException e){
            System.out.println("空指针异常");
        }
        System.out.println("程序还在继续向下运行");
        System.out.println("是的一直在运行....");
        ——————输出:除数为0,算法不成立!
					程序还在继续向下运行
					是的一直在运行....
eg:	......————另一种写法
			try {
            System.out.println(a / b);
            System.out.println(arr.length);
            System.out.println(arr[3]);
            System.out.println("====================");
        } catch (ArrayIndexOutOfBoundsException | ArithmeticException | NullPointerException e) {
        System.out.println("数组角标越界异常");
        if(e instanceof ArithmeticException){
            System.out.println("除数为0异常");
        }else if(e instanceof ArrayIndexOutOfBoundsException){
            System.out.println("空指针异常");
        }
    }
  • catch可以并列捕获多个不同的异常——若捕获的异常是平级关系,则无需区分前后,若为继承关系,则父类异常写在最后
  • ctrl+h:可以看异常的父类
  • 所有异常的父父类是Exception
try{ }catch(){ }finally{ }
e.printStackTrace()——打印异常的堆栈信息,以及在程序中出现的位置
e.getMessage()——获取异常信息 返回字符串
 eg:	String message = e.getMessage();
        System.out.println(message);————输出:null
e.toString()——获取异常类名和异常信息 返回字符串
 eg:	String s = e.toString();
        System.out.println(s);————输出:java.util.InputMismatchException
A.close()———释放资源
  • finally ( ) ——用来执行最后的收尾工作,例如释放资源
 eg:	Scanner sc = null;
        try{
            sc = new Scanner(System.in);
            System.out.println("请输入第一个数:");
            int a = sc.nextInt();
            System.out.println("请输入第二个数:");
            int b = sc.nextInt();
            System.out.println(a/b);
        }catch (ArithmeticException e){
            //System.out.println("除数为0异常");
              e.printStackTrace();————打印异常的堆栈信息
        }finally {
            System.out.println("执行最后的代码");
            if(sc != null);
            sc.close();——————————释放资源
        }————输入:15  0
         ————输出:执行最后的代码
					java.lang.ArithmeticException: / by zero
					at yichang.demo3.main(demo3.java:14)

编译期异常

  • 处理方法
  • 1. 采用throws抛出 抛给调用者
  • 2. 采用try自己捕获处理
  • 抛出异常
eg:	public class demo6 {
    public static void main(String[] args) throws CloneNotSupportedException {
        Dog dog = new Dog();
        dog.clone();——————————输出:--------
    }
}
class Dog implements Cloneable{
    @Override
    protected Object clone() throws CloneNotSupportedException {
        System.out.println("--------");
        return super.clone();
    }
}
  • 用try自己捕获
    快捷键: ctrl+alt+T 把括住的一段代码,进行异常处理
eg:	public class demo6 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        try {
            dog.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}
class Dog implements Cloneable {
    @Override
    protected Object clone() throws CloneNotSupportedException {
        System.out.println("--------");
        return super.clone();
    }
}

throw和throws区别

throw: 在方法内部进行抛出 抛出一个具体的异常对象 若抛出了说明发生了这种异常

  eg:	public static void main(String[] args) {
        Test(1,0);
        System.gc();
    }
    private static void Test(int i, int j) {
        if(j==0){
            throw new ArithmeticException("除数为0了");
        }else{
            System.out.println(i/j);————————输出:java.lang.ArithmeticException: 除数为0}
    }

throws:在方法声明上进行抛出 抛出多个异常类型 抛出的异常类型只是可能发生 并不一定发生

自定义异常
import java.util.Scanner;
public class demo8 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的成绩:");
        int score = sc.nextInt();
        if(score>0||score<100){
            throw new ScoreException("成绩超出范围异常");
        }else{
            System.out.println("成绩合法!");
        }
    }
}
public class ScoreException extends RuntimeException {
    public ScoreException(String s) {
        super(s);
    }
}

注意:

  1. 子类重写父类方法时,若方法内部有编译期异常 子类的方法必须抛出相同的异常或父类异常的子类
  2. 子类不能抛出父类没有抛出的异常
  3. 父类抛出异常 子类可以不抛出
  4. 若父类被重写的方法没有异常抛出 子类的方法不能抛出异常 只能try catch捕获

IO流

  • 概念:IO流用来处理设备之间的数据传输 上传文件和下载文件
  • IO流传输的数据以文件的形式体现

File类

  • 概念:文件和目录路径名的抽象表示形式 可表示文件 也可表示目录

路径分为相对路径和绝对路径
相对路径:不带有盘符号的路径——指相对于自己的目标文件位置 用“/”字符作为目录的分隔字符
绝对路径:带有盘符号的路径——指文件在硬盘上真正存在的路径 用“\”或“/”字符作为目录的分隔字符

File(String pathname)————根据一个路径得到File对象
  File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug");
File(String parent, String child)————根据一个目录和一个子文件/目录得到File对象——parent为父路径 child为子文件名
  File file1 = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\", "Debug");
File(File parent, String child)————根据一个父File对象和一个子文件/目录得到File对象
 eg:	File file2 = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\");
        File file3 = new File(file2, "Debug");
public boolean createNewFile()————创建一个新的文件 如果存在这样的文件,就不创建了
eg:	File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\abc");
        boolean b = file.createNewFile(); // 创建文件是否成功
        System.out.println(b);
public boolean mkdir()————创建文件夹 如果存在这样的文件夹,就不创建了 注意这个方法只能创建单层目录 如果创建多层目录得一层一层创建
eg:	File file1 = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\def");
        boolean b1 = file1.mkdir();
        System.out.println(b1);
public boolean mkdirs()————创建文件夹,如果父文件夹不存在,会帮你创建出来 可以创建多层目录 当然也可以创建单层目录
 eg:	File file2 = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\def\\eee\\fff");
        boolean b2 = file2.mkdirs();
        System.out.println(b2);
public boolean delete()————删除文件或者文件夹

删除文件夹时 这个文件夹必须是空文件夹 否则不能被删除

  • 删除文件不走回收站
eg:	File file2 = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\def\\eee\\fff");
 		boolean b3 = file2.delete();
  		System.out.println(b3);
public boolean renameTo(File dest)————把文件重命名为指定的文件路径

若路径名相同 则改名
若路径名不同 则为改名并剪切

 eg:	File file3 = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\def\\eee");
        File file4 = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\def\\zy");
        boolean b4 = file3.renameTo(file4);————eee改成zy
        System.out.println(b4);
 eg:	File file7 = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\yyy\\eee");
        File file8 = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\zy");
        boolean b7 = file7.renameTo(file8);————yyy中的eee剪切到Debug中改名为zy
        System.out.println(b7);
public boolean isDirectory()————判断是否是目录
 eg:	File file1 = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\yyy");
        boolean b1 = file1.isDirectory();
        System.out.println(b1);
public boolean isFile()————判断是否是文件
 eg:	File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\abc");
        boolean b = file.isFile();
        System.out.println(b);
public boolean exists()————判断是否存在
eg:	File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\abc");
        boolean b2 = file.exists();
        System.out.println(b2);
public boolean canRead()————判断是否可读
 eg:	File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\abc");
        boolean b3 = file.canRead();
        System.out.println(b3);
public boolean canWrite()————判断是否可写
 eg:	File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\abc");
        boolean b3 = file.canWrite();
        System.out.println(b3);
public boolean isHidden()————判断是否隐藏
 eg:	File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\abc");
        boolean b3 = file.isHidden();
        System.out.println(b3);
public boolean isAbsolute()————判断是否使用的是绝对路径
 eg:	File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片\\Debug\\abc");
        boolean b3 = file.isAbsolute();
        System.out.println(b3);
public String getAbsolutePath()————获取绝对路径
 String absolutePath = file.getAbsolutePath();
public String getPath()————获取相对路径
 String path = file.getPath();
public String getParent() ————返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
 String parent = file.getParent();
public File getParentFile()————返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
  File parentFile = file.getParentFile();
public long getTotalSpace()————返回此抽象路径名指定的分区大小。 返回总容量 单位字节
  long totalSpace = file.getTotalSpace();
  System.out.println(totalSpace/1024/1024/1024.0+"G");
public long getFreeSpace()————返回此抽象路径名指定的分区中未分配的字节数。返回剩余容量 单位字节
 long freeSpace = file.getFreeSpace();
 System.out.println(freeSpace/1024/1024/1024.0+"G");
public String getName()————获取名称
 String name = file.getName();
public long length()————获取长度。字节数
  long length = file.length();
public long lastModified()————获取最后一次的修改时间,毫秒值
eg:	long time = file.lastModified();——毫秒值
        Date date = new Date(time);————————毫秒值转换为默认格式
        String format = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss").format(date);——————毫秒值转换为年月日 时分秒
        System.out.println(format);
public String[] list()————获取指定目录下的所有文件或者文件夹的名称数组
eg:	File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片");
        String[] list = file.list();//获得此目录下所有的文件或文件夹的名称数组
        for (String s : list) {   //遍历数组
            File file1 = new File(file, s);
            if(file1.isFile()&&file1.getName().endsWith(".jpg")){
                System.out.println(file1.getName());
            }
        }
public File[] listFiles()————获取指定目录下的所有文件或者文件夹的File数组
eg:	File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片");
        File[] files = file.listFiles();
        for (File file1 : files) {
            if(file1.isFile()&&file1.getName().endsWith(".jpg")){
                System.out.println(file1.getName());
            }
        }
public String[] list(FilenameFilter filter)————过滤文件
  • 过滤的方法:根据此方法的返回值进行过滤,返回false不往数组里面装 返回true就装进数组
eg:	File file = new File("C:\\Users\\ZY\\Desktop\\学校\\图片");
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                File file1 = new File(dir, name);
                if (file1.isFile()&& file1.getName().endsWith(".jpg")){
                    return true;
                }else {
                    return false;
                }
            }
        });
        for (File file1 : files) {
            System.out.println(file1);
        }
public File[] listFiles(FilenameFilter filter)——过滤文件
 eg:	File file1 = new File("E:\\img");
        File[] files1 = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File f) {
                //System.out.println(pathname);
                if (f.isFile() && f.getName().endsWith(".txt")) {
                    return true;
                } else {
                    return false;
                }

            }
        });
        for (File file2 : files1) {
            System.out.println(file1.getName());
        }
  • final:状态修饰符 修饰类 变量 或者成员方法
  • Finally:用在try{ } catch{ }语句中 用来释放资源
  • Finalize:Object类中的一个方法 用来回收垃圾

修改文件夹的后缀名

import java.io.File;
public class demo {
    public static void main(String[] args) {
        ————————修改文件的后缀名
        File file = new File("C:\\Users\\ZY\\Desktop\\photo");
        DiGui(file);
    }
    private static void DiGui(File file) {
        if(file.isDirectory()){  //若file是个文件夹 遍历取出里面的文件或者文件夹
            File[] files = file.listFiles();
            for (File file1 : files) {
                if(file1.isFile()&&file1.getName().endsWith(".jpg")){
                    String absolutePath = file1.getAbsolutePath();//打印文件的绝对路径
                    int i = absolutePath.lastIndexOf(".");
                    String s = absolutePath.substring(0, i);//截取到.
                    File newfile = new File(s + ".png");
                    file1.renameTo(newfile);//重命名文件
                }else {
                    DiGui(file1);
                }
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值