Java基础知识 23(异常机制(运行期异常和编译期异常),try...catch...语句,finally,常见异常类,throw和throws辨析,自定义异常,File类)

Java基础知识 23

IO流的引入

IO:InputStream OutputStream 输入输出流
在Java中IO流用于进行设备之间的一个数据传输,比如:复制文件,上传,下载文件,都是进行数据的传输,就需要使用到IO流来完成操作。我们在上传或下载文件的时候,使用流的途中,可能会遇到一些问题,这些问题就需要我们来解决。
IO流用来进行数据的传输,这些数据在电脑上,它是以文件的形式来体现的。

异常机制

在谈论异常机制之前,我们先画一下异常机制的继承图。
在这里插入图片描述
在Java中,对于遇到的问题,有一个类来进行描述:Throwable:问题或者错误的父类。Exception:描述一般性的问题异常。Error:错误,严重性错误。
对于异常也分为两类:一种是编译期异常,发生在编译期间,非RuntimeException及其子类,不解决无法运行,必须解决。另一种是运行期异常,发生在运行期间,RuntimeException及其子类,可以选择解决,也可以选择不解决。

运行期异常

运行期异常,如果选择不处理,Java就默认使用处理方式。
默认处理方式:当遇到异常时,Java虚拟机就会打印出异常的堆栈信息,然后退出Java虚拟机。也就是说,Java默认处理运行期异常的方式不够友好,你可以自己去处理这种运行期异常。

try…catch…

自己处理这个运行期异常信息,遇到异常了,我们可以自己选择提示异常信息,但是不退出系统,让代码继续往下执行。

public class Mytest2 {
    public static void main(String[] args) {
        int i=10;
        int j=0;
        try {
            //try函数体中放置有可能出现问题的代码
            System.out.println(i/j);
        }catch (ArithmeticException a){
            //(捕获何种类型的异常类名+异常变量名)
            //catch函数体中放置一旦出现这种情况,我们给的错误提示
            System.out.println("除数不能为0");
        }
        System.out.println("后面的代码执行了");
    }
}
try{
    放置可能出现问题的代码;
}catch(捕获何种类型的异常){
    放置的是一旦出现这种异常,我们如何处理。
}

如果没有捕获到要出现的这种类型的异常信息,catch里面的代码就不会执行。或者是捕获到的异常和发生的异常不一致,catch里面的代码也不会执行。

public class Mytest3 {
    public static void main(String[] args) {
        int i=10;
        int j=0;
        try {
            System.out.println(i/j);
        }catch (NullPointerException a){
            //如果没有捕获到要出现的这种异常类型,catch里面的代码就不会执行
            //或者是捕获到的异常类型和发生的异常不一致,catch里面的代码也不会执行
            System.out.println("除数不能为0");
        }
        System.out.println("后面的代码执行了");
    }
}

注意事项:
(1)如果不清楚具体属于什么类型的异常,我们可以使用Exception类型来捕捉所有类型的异常,但是需要注意的是:能明确异常的尽量明确,不要用Exception捕捉异常。因为一旦发生异常,你都不知道出现了什么异常。
(2)捕获到的多个异常之间如果有父子继承关系,父类异常放到最后,并列异常的,谁前谁后没有关系。
(3)try里面放的是有可能出现问题的代码,对于没有可能出现问题的代码就不要往里面放了。

public class Mytest4 {
    public static void main(String[] args) {
        int i=9;
        int j=0;
        int[] arr={3,4,5};
        int[] arr1=null;
        //如果说有多种类型的异常需要捕获,我们可以采用多个catch语句来进行异常捕获
        try {
            System.out.println(arr1[0]);//空指针异常
            System.out.println(arr[3]);//角标越界异常
            System.out.println(i/j);//算术异常
        }catch (ArithmeticException a){
            System.out.println("除数为0了");
        }catch (IndexOutOfBoundsException b){
            System.out.println("没有索引是3的元素");
        }catch (NullPointerException c){
            System.out.println("arr1[]集合中没有元素");
        }catch (Exception d){
            //如果不清楚具体发生异常的类型,我们可以选择Exception类型来捕获所有类型的异常
            //但是需要注意的是:能明确类型的异常尽量明确,不要用Exception来捕获异常
            //因为一旦发生异常,你都不知道发生了什么异常
            //捕获的多个异常之间有父子继承关系,父类异常放到最后,并列异常的谁前谁后没有关系
            System.out.println("其他不明确的异常");
        }
        System.out.println("后面的程序执行了");
        System.out.println("后面的程序执行了");
        System.out.println("后面的程序执行了");
        System.out.println("后面的程序执行了");
    }
}
关键字finally

finally:最终的,不管try里面的代码有没有遇到异常,那么finally里面的代码都会执行。一般我们会在finally结构体中写一些善后收尾工作的代码,比如进行资源的释放。

import java.util.Scanner;

public class Mytest {
    public static void main(String[] args) {
        Scanner scanner =null;
        try {
            scanner = new Scanner(System.in);
            System.out.println("请输入第一个整数");
            int one = scanner.nextInt();
            System.out.println("请输入第一个整数");
            int two = scanner.nextInt();
            System.out.println(one/two);
        }catch (ArithmeticException a){
            System.out.println("除数为0了");
        }finally {
            //释放资源
            System.out.println("释放资源");
            if (scanner!=null){
                scanner.close();
            }
        }
        System.out.println("下面的代码执行了");
    }
}
编译期异常

编译期异常:发生在编译期间,非RuntimeException及其子类,编译期间异常必须手动处理,不处理程序无法运行。例如:日期类Date:我们调用parse方法时,会遇到一个编译期异常,必须手动处理:
处理方式:(1)使用throws向上抛出,抛给调用者去处理,谁调用谁处理,俗称甩锅。一般来说,抛到main方法中就不再自己捕获处理了。工具类中异常,就抛给调用者处理吧。
              (2)自己使用try…catch…捕获处理

try{
    System.out.println(a/b);
}catch(ArithmeticException e){
    对于异常的处理,不要做空处理,哪怕只是一句输出错误的提示句都行。
    e.printStackTrace();//打印异常的堆栈信息。
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Mytest2 {
    public static void main(String[] args) {
        //编译期异常:发生在编译期间,非RuntimeException及其子类,编译期异常必须手动处理,不处理程序无法运行
        String datestr="2020-05-23";
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        //调用parse()方法时,会遇到一个编译期异常,编译期异常必须处理,不处理程序无法运行
        try {
            Date date = simpleDateFormat.parse(datestr);
            System.out.println(date);
        }catch (ParseException a){
            System.out.println("解析失败!");
        }
        //方式1:使用throws向上抛出,抛给调用者去处理,谁调用谁处理,俗称甩锅
        //方式2:使用try catch 捕获处理
        System.out.println("下面的代码执行了");
    }
}

编译期异常的注意事项:

(1)子类重写父类方法时,子类的方法必须抛出相同的异常或者是父类异常的子类。或者是子类不抛出异常也是可以的。
(2)如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是它的子集,子类不能抛出父类没有的异常,或者是子类不抛出异常也是可以的。
(3)如果被重写的方法没有异常抛出,那么子类的方法就绝不可以抛出异常,如果子类方法内有异常发生,那么子类只能用try…catch…语句,不能用throws。

Throwable的几个常见方法:
(1)getMessage()------>获取异常信息,返回字符串。
(2)toString()------->获取异常类名和异常信息,返回字符串。
(3)printStackTrace------->获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void。

public class Mytest {
    public static void main(String[] args) {
        int a=10;
        int b=0;
        try {
            System.out.println(a/b);
        }catch (ArithmeticException e){
            //System.out.println("除数为0了");
            //System.out.println(e.getMessage());//获取异常信息,返回字符串
            //System.out.println(e.toString());//获取异常类名和异常信息,并返回字符串
            e.printStackTrace();
            //获取异常类名和异常信息,以及常出现在程序中的位置,返回void
        }
        System.out.println("后面的程序!");
        System.out.println("后面的程序!");
        System.out.println("后面的程序!");
        System.out.println("后面的程序!");
    }
}
常见的异常类

ArithmeticException:算数异常。
IndexOutOfBoundsException:角标越界异常。
NullPointerException:空指针异常。

public class Mytest4 {
    public static void main(String[] args) {
        int i=9;
        int j=0;
        int[] arr={3,4,5};
        int[] arr1=null;
        //如果说有多种类型的异常需要捕获,我们可以采用多个catch语句来进行异常捕获
        try {
            System.out.println(arr1[0]);//空指针异常
            System.out.println(arr[3]);//角标越界异常
            System.out.println(i/j);//算术异常
        }catch (ArithmeticException a){
            System.out.println("除数为0了");
        }catch (IndexOutOfBoundsException b){
            System.out.println("没有索引是3的元素");
        }catch (NullPointerException c){
            System.out.println("arr1[]集合中没有元素");
        }catch (Exception d){
            System.out.println("其他不明确的异常");
        }
        System.out.println("后面的程序执行了");
        System.out.println("后面的程序执行了");
        System.out.println("后面的程序执行了");
        System.out.println("后面的程序执行了");
    }
}

InputMismatchException类:由Scanner抛出,表明获取的标记与期望类型的模式不匹配,或者该标记超出期望类型的范围。

import java.util.InputMismatchException;
import java.util.Scanner;

public class Mytest2 {
    public static void main(String[] args) {
        while (true){
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个数:");
            try {
                int num = sc.nextInt();
                System.out.println(num);
            }catch (InputMismatchException e){
                System.out.println("输入类型不匹配,请重新输入");
            }
        }
    }
}
throw和throws的辨析

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

public class Mytest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        int one = sc.nextInt();
        System.out.println("请输入第二个数:");
        int two = sc.nextInt();

        double a=test(one,two);
        System.out.println(a);
    }

    private static double test(int one, int two) {
        double i=0;
        if (two==0){
            throw new ArithmeticException("除数为0了");
        }else {
            i=one/two;
        }
        return i;
    }
}
final,finally,finalize的辨析

(1)final是一个状态修饰符,可以用来修饰类,变量,成员方法。被修饰的类不能被子类继承,修饰的变量其实是一个常量,不能被再次赋值。修饰的方法不能被重写。
(2)finally:用在try…catch…语句中,作用:释放资源,特点:始终被执行(JVM不能退出)
(3)finallize:Object类中的一个方法,用来回收垃圾。

自定义异常

在开发项目时,会遇到各种各样的异常,那么Java提供的这些异常类,并不能完全的描述我们所遇到的各种异常,对于Java中没有提供的异常,但是业务需求,又要这种异常,我们可以自定义异常。
自定义异常继承RuntimeException类
Exception:非运行时异常,在项目运行之前必须处理,一般由程序员try…catch…处理掉
RuntimeException:运行时异常,在项目运行之后出错,直接终止运行,异常由JVM虚拟机处理。
示例1:判断手机号码是否输入正确?

import java.util.Scanner;

public class Mytest2 {
    static String str="[1][3,4,5,7,8,9][0-9]{9}";
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的手机号码:");
        String s = sc.nextLine();
        chayan(s);
    }

    private static void chayan(String s) {
        if (s.matches(str)){
            System.out.println("手机号码输入正确!");
        }else {
            System.out.println("手机号码输入有误!");
            throw new NumberIsWrong("手机号码输入有误");
        }
    }
}
-------------------------------
public class NumberIsWrong extends RuntimeException {
    public NumberIsWrong(String string) {
        super(string);
    }
}

示例2:判断成绩是否输入错误?

import java.util.Scanner;

public class Mytest3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的成绩:");
        int num = sc.nextInt();
        CheckNum(num);
    }

    private static void CheckNum(int num) {
        if (num>=0&&num<=100){
            System.out.println("成绩输入正确!");
        }else {
            System.out.println("成绩输入有误!");
            throw new ScorsIsWrong("成绩输入有误!");
        }
    }
}
--------------------------
public class ScorsIsWrong extends RuntimeException {
    public ScorsIsWrong(String s) {
        super(s);
    }
}
File类

IO流的作用,用来进行设备之间的一个数据传输。这些数据在我们电脑上是以文件的形式来体现的,比如文本文件,图片,视频文件。Java为了描述文件或者文件夹这个概念,给我们提供了一个File类来描述文件或文件夹。File文件和目标路径名的抽象表示形式。
构造方法:File(File parent,String child)
根据parent抽象路径名和child路径名字符串创建一个新File实例。
                File(String pathname)
通过将给定路径名字符串转换成抽象路径名来创建一个新File实例。
                File(String parent,String child)
根据parent路径名字符串和child路径名字符串创建一个新File实例。**

import java.io.File;

public class Mytest2 {
    public static void main(String[] args) {
        /* File(File parent, String child)
        根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。*/
        File fuPath = new File("C:\\Users\\YangJian\\Desktop");
        File file = new File(fuPath, "yangjian.txt");
        System.out.println(file);
        System.out.println("-------------------");
        /*  File(String parent, String child)
        根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。*/
        //参数1:父路径的Stirng类型 参数2:子文件名
        File file1 = new File("C:\\Users\\YangJian\\Desktop", "yangjian.txt");
        System.out.println(file1);
        System.out.println("-------------------");
        File file2 = new File("C:\\Users\\YangJian\\Desktop\\yangjian.txt");
        System.out.println(file2);
        //以上三种构造方法,是为了我们在编码中,能够灵活的去选用哪种结构
    }
}

pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
pathSeparatorChar:与系统有关的路径分隔符。
Separator:与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
SeparatorChar:与系统有关的默认名称分隔符。

import java.io.File;

public class Mytest {
    public static void main(String[] args) {
        //通过一个路径字符串,可以封装一个文件或文件夹
        File file = new File("C:\\Users\\YangJian\\Desktop\\算法排序.md");
        System.out.println(file);
        //注意路径分隔符的另一种写法
        File file1 = new File("C:/Users/YangJian/Desktop/算法排序.md");
        System.out.println(file1);
        System.out.println("-------------------");
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator);
        System.out.println("-------------------");
        char pathSeparatorChar = File.pathSeparatorChar;
        System.out.println(pathSeparatorChar);
        System.out.println("-------------------");
        String separator = File.separator;
        System.out.println(separator);
        System.out.println("-------------------");
        char separatorChar = File.separatorChar;
        System.out.println(separatorChar);
    }
}

绝对路径和相对路径:绝对路径:带有盘符的一个详细路径。
                                   相对路径:不带有盘符的路径。
使用绝对路径可以封装文件:

File file = new File("E:\\Java project\\20200523-File类-练习\\aaa.txt");

但是如果这个文件在我们项目的根目录的文件夹下,我们可以使用相对路径来封装:

File file1 = new File("aaa.txt");
import java.io.File;

public class Mytest3 {
    public static void main(String[] args) {
        File file = new File("E:\\Java project\\20200523-File类-练习\\aaa.txt");
        System.out.println(file);
        System.out.println("-----------------");
        File file2 = new File("E:\\Java project\\20200523-File类-练习\\bbb.txt");
        System.out.println(file2);
        System.out.println("-----------------");
        //如果这个文件在我们项目的文件夹的根目录下,可以使用相对路径来封装
        File file1 = new File("aaa.txt");
        System.out.println(file1);
        System.out.println("-----------------");
        File file3 = new File("bbb.txt");
        System.out.println(file3);
        System.out.println("-----------------");
        //./ 当前目录 项目的文件夹的根目录下
        File file4 = new File("./");
        //public String getAbsolutePath():	获取绝对路径
        System.out.println(file4.getAbsolutePath());
    }
}
File类的判断功能

(1)isDirectory():判断是否为目录
(2)isFile():判断是否是文件。
(3)exists():判断是否存在。
(4)canRead():判断是否可读。
(5)canWrite():判断是否可写。
(6)isHidden():判断是否隐藏。
(7)isAbsolute():判断是否使用的是绝对路径。

import java.io.File;

public class Mytest {
    public static void main(String[] args) {
        //判断功能
        //判断是不是一个文件
        File file = new File("bbb.txt");
        boolean b = file.isFile();
        System.out.println(b);
        System.out.println("-----------------");
        //判断这个文件是否存在
        boolean b2 = file.exists();
        System.out.println(b2);
        System.out.println("-----------------");
        //判断是否可读
        boolean b3 = file.canRead();
        System.out.println(b3);
        System.out.println("-----------------");
        //判断是否可写
        boolean b4 = file.canWrite();
        System.out.println(b4);
        System.out.println("-----------------");
        //判断是否隐藏
        boolean b5 = file.isHidden();
        System.out.println(b5);
        System.out.println("-----------------");
        //判断是否使用的是绝对路径
        boolean b6 = file.isAbsolute();
        System.out.println(b6);
    }
}
File类的创建功能

(1)CreateNewFile():创建一个新的文件。
(2)mkdir():创建一个新的文件夹,只能创建单层目录。
(3)mkdirs():创建一个新的文件夹,可以创建多层目录。

import java.io.File;
import java.io.IOException;

public class Mytest {
    public static void main(String[] args) throws IOException {
        //用的相对路径
        File file = new File("a.txt");
        //创建一个文件。返回值指的是文件是否创建成功,返回true代表创建成功
        //文件已经存在,你重复创建就返回false
        boolean b = file.createNewFile();
        System.out.println(b);
        System.out.println("-------------------");
        //用绝对路径
        File file1 = new File("E:\\Java project\\20200523-File类-练习\\b.txt");
        boolean b1 = file1.createNewFile();
        System.out.println(b1);
        System.out.println("-------------------");
        //用的相对路径 ./ 当前路径 指的是项目文件夹的根目录下
        File file2 = new File("./c.txt");
        boolean b2 = file2.createNewFile();
        System.out.println(b2);
        System.out.println("-------------------");
        //用的相对路径 ../ 表示上一级路径
        File file3 = new File("../aaa.txt");
        boolean b3 = file3.createNewFile();
        System.out.println(b3);
        System.out.println("-------------------");
        //../../ 当前目录的上两级目录
        File file4 = new File("../../bbb.txt");
        boolean b4 = file4.createNewFile();
        System.out.println(b4);
    }
}
-------------------------------
import java.io.File;

public class Mytest {
    public static void main(String[] args) {
        //在当前项目根目录下创建一个demo文件夹
        File file = new File("demo");
        //创建文件夹,创建成功返回true ,如果文件夹已经存在,你重复创建,就返回false
        boolean b = file.mkdir();
        System.out.println(b);
        System.out.println("------------------------");
        //使用绝对路径,在桌面上创建一个文件夹
        File file1 = new File("C:\\Users\\YangJian\\Desktop", "demo");
        boolean b1 = file1.mkdir();
        System.out.println(b1);
        System.out.println("------------------------");
        //mkdir() 这个方法的不好之处,就是只能创建单级文件夹
        //如果要创建多级文件夹,我们可以使用另外一个方法
        File file2 = new File("C:\\Users\\YangJian\\Desktop", "1/2/3");
        boolean b2 = file2.mkdirs();
        System.out.println(b2);
    }
}
File类的获取功能

(1)getAbsolutionPath():获取绝对路径。
(2)getPath():获取相对路径。
(3)getParent():返回此抽象路径名父目录的路径名字符串,如果此路径没有父目录,返回null。
(4)getParentFile():返回此抽象路径名父目录的抽象路径名,如果此路径名没有父目录,返回null。

import java.io.File;

public class Mytest {
    public static void main(String[] args) {
        //File文件的获取功能
        //获取文件的绝对路径,返回的是字符串类型
        File file = new File("eee.txt");
        String absolutePath = file.getAbsolutePath();
        System.out.println(absolutePath);
        System.out.println("---------------------");
        //获取文件的相对路径
        String path = file.getPath();
        System.out.println(path);
        System.out.println("---------------------");
        //获取文件的绝对路径,返回的是File,这个方法比较灵活
        File absoluteFile = file.getAbsoluteFile();
        System.out.println(absoluteFile);
        System.out.println("---------------------");
        //获取文件的父路径,返回的是字符串类型
        File file1 = new File("E:\\Java project\\20200524-File类-上午-练习", "eee.txt");
        String parent = file1.getParent();
        System.out.println(parent);
        System.out.println("---------------------");
        //获取文件的父路径,返回的是File类型,这个方法比较灵活
        File parentFile = file1.getParentFile();
        System.out.println(parentFile);
        System.out.println("---------------------");
        //获取文件的父路径,返回的是字符串类型
        File file2 = new File("E:\\Java project\\20200524-File类-上午-练习\\eee.txt");
        String parent1 = file2.getParent();
        System.out.println(parent1);
        //获取文件的父路径,返回的是File类型,这个方法比较灵活
        File parentFile1 = file2.getParentFile();
        System.out.println(parentFile1);
        System.out.println("---------------------");
        //在封装文件时,没有指定父路径,返回就是null
        File file3 = new File("eee.txt");
        String parent2 = file3.getParent();
        System.out.println(parent2);
    }
}

(5)getTotalSpace():返回此抽象路径名指定的分区大小,返回总容量,单位为字节。
(6)getFreeSpace():返回此抽象路径名指定的分区中未分配的字节数,返回剩余容量,单位是字节。

public class Mytest {
    public static void main(String[] args) {
        //获取磁盘总容量,返回的是字节数
        File file = new File("F://");
        long totalSpace = file.getTotalSpace();
        //1G=1024M  1M=1024K  1K=1024字节
        System.out.println((totalSpace / 1024 / 1024 / 1024.0) + "GB");
        System.out.println("--------------------");
        //获取磁盘的剩余容量
        long freeSpace = file.getFreeSpace();
        System.out.println((freeSpace / 1024 / 1024 / 1024) + "GB");
    }
}

(7)getName():获取文件的名称。
(8)length():获取文件的长度,单位为字节数。

public class Mytest2 {
    public static void main(String[] args) {
        File file = new File("a.txt");
        //获取文件名
        String name = file.getName();
        System.out.println(name);
        System.out.println("-------------");
        //获取文件的大小
        long length = file.length();
        System.out.println(length);
    }
}

(9)lastModified():获取最后一次的修改时间,单位为毫秒值。

public class Mytest3 {
    public static void main(String[] args) {
        //C:\Users\YangJian\Desktop
        File file = new File("C:\\Users\\YangJian\\Desktop\\杨健-生活日志.md");
        //获取文件的最后一次修改时间,返回的是毫秒值
        long time = file.lastModified();
        System.out.println(time);
        System.out.println("-----------------------");
        //把毫秒值转换成字符串,以年月日 时分秒 来展示
        Date date = new Date(time);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = simpleDateFormat.format(date);
        System.out.println(format);
    }
}

(10)list():获取指定目录下的所有文件或者文件夹的名称数组。
(11)listFiles():获取指定目录下的所有文件或者文件夹的File数组。

public class Mytest {
    public static void main(String[] args) {
        //list():获取指定目录下的所有文件或者文件夹的名称数组
        File file = new File("F:\\杨健");
        String[] list = file.list();
        for (String s : list) {
            if (s.equals("123.txt")){
                System.out.println("程序执行进来了!");
                System.out.println(s);
                File file1 = new File(file, s);
                System.out.println(file1);
                file1.delete();
            }
        }
        System.out.println(file);
    }
}
------------------------------
public class Mytest2 {
    public static void main(String[] args) {
        //listFile():获取指定目录下的所有文件或者文件夹的File数组
        File file = new File("F:\\杨健");
        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f.getName());
            if (f.isDirectory()){
                f.delete();
            }
        }
    }
}
File文件的删除功能

delete():删除文件夹,只能删除空的,如果是非空的,则不能删除。

File file = new File("bbb.txt");
当调用delete()方法时,直接删除文件,不管文件是否存在,一经调用立即执行
file.delete();
当调用deleteOnExit()方法时,只是相当于对deleteOnExit()做一个声明
当程序运行结束,JVM终止时才真正调用了deleteOnExit()方法实现删除操作。
即该方法是将删除的命令缓存了一下,到服务停止的时候再进行操作。
file.deleteOnExit();
File文件的重命名功能

renameTo():源文件和传进来的这个文件对象,都在相同的路径下,它就是重命名。

import java.io.File;

public class Mytest2 {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\YangJian\\Desktop\\demo");
        //delete()删除文件夹的时候,只能删除空文件夹,如果是非空文件夹,则删除失败。
        boolean b = file.delete();
        System.out.println(b);
    }
}
------------------------------
public class Mytest3 {
    public static void main(String[] args) {
        File file = new File("aaa.txt");
        File file1 = new File("bbb.txt");
        //重命名:源文件和传进来的这个文件对象,都在相同路径下它就是重命名
        boolean b = file.renameTo(file1);
        System.out.println(b);
        System.out.println("--------------------");
        //renameTo(mbFile)方法:源文件和传进来的这个文件,不在同一个路径下,就是剪贴并重命名。
        File file2 = new File("eee.txt");
        File file3 = new File("C:\\Users\\YangJian\\Desktop\\fff.txt");
        boolean b1 = file2.renameTo(file3);
        System.out.println(b1);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值