25.Java Math 类/Random 类/File 类/File 类递归结构/枚举类型

Math 类

java.lang.Math 提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为 double 型。

Math 类常用方法

Random 类

这个类是专门用来生成随机数的,并且 Math.random() 底层调用的就是 Random 的 nextDouble() 方法。

Random 类代码示例:常用方法

package com.test;
import java.util.Random;
// 测试 Random 类常用方法
public class TestRandom {
    public static void main(String[] args) {
        Random rand = new Random();
        // 随机生成[0,1]之间的 double 类型的数据
        System.out.println(rand.nextDouble());
        // 随机生成 int 类型允许范围之内的整型数据
        System.out.println(rand.nextInt());
        // 随机生成[0,1]之间的 float 类型的数据
        System.out.println(rand.nextFloat());
        // 随机生成 true 或 false
        System.out.println(rand.nextBoolean());
        // 随机生成[0,10]之间的 int 类型的数据
        System.out.println(rand.nextInt(10));
        // 随机生成[20,30]之间的 int 类型的数据
        System.out.println(20 + rand.nextInt(10));
        // 随机生成[20,30]之间的 int 类型的数据
        System.out.println(20 + (int)(rand.nextDouble() * 10));
    }
}

File 类

File 类用来代表文件和目录。

File 类的基本用法

java.io.File 类:代表文件和目录。
主要用于读取、生成、删除、修改文件的属性
可继承。

File 类常见构造方法:public File(String pathname)

以 pathname 为路径创建 File 对象,如果 pathname 是相对路径,则默认的当前路径在系统属性 user.dir 中存储。

代码示例:文件路径相关操作

package test.File;
import java.io.File;
import java.io.IOException;
import java.util.Date;

public class TestFile {
    public static void main(String[] args) throws IOException {
        File f1 = new File("D:/阿jun.txt"); // 用 f1 指代 阿jun.txt 文件的绝对路径
        File f2 = new File("d.txt");  // 用对象 f2 指代 d.txt 文件的相对路径
        System.out.println(System.getProperty("user.dir")); // 当前项目地址
        File f3 = new File(System.getProperty("user.dir")); // 当前项目地址
        System.out.println(f1); // D:\阿jun.txt
        System.out.println(f2); // d.txt
        System.out.println(f3); // D:\DeveloperTools\IDEA\CodeLocation\arrayPro

        // 创建文件:需要使用 throws IOException 抛出异常
        // 如果没有找到 f1 这个文件路径,则会在对应的位置创建一个新的同名文件
        f1.createNewFile(); // 在 D 盘创建一个 阿jun.txt 文件
    }
}

使用 File 类访问文件或目录属性

package test.File;
import java.io.File;
import java.io.IOException;
import java.util.Date;

public class TestFile02 {
    public static void main(String[] args) throws IOException{
        // 使用 File 类访问文件或目录属性
        File f4 = new File("D:/123.txt");
        f4.createNewFile();  // 没文件时创建文件
        System.out.println("File 是否存在:" + f4.exists());
        System.out.println("File 是否是目录:" + f4.isDirectory());
        System.out.println("File 是否是文件:" + f4.isFile());
        System.out.println("File 最后修改时间:" + new Date(f4.lastModified()));
        System.out.println("File 的大小:" + f4.length());
        System.out.println("File 的文件名:" + f4.getName());
        System.out.println("File 的目录路径:" + f4.getPath());
    }
}

File 对象创建空文件或目录(该对象所指的文件或目录不存在的情况下)

代码示例:使用 mkdir 创建目录

package test.File;
import java.io.File;
import java.io.IOException;

public class TestFile03 {
    public static void main(String[] args) throws IOException {
        // 定义具体文件对象
        File f = new File("D:/阿jun123.txt");
        f.createNewFile(); // 会在 D:/阿jun/ 目录下生成 阿jun123.txt,D:/阿jun/目录需要存在,否则报错
        f.delete();  // 将文件或目录从硬盘上删除

        // 定义目录对象。 f2 指代的是这个目录树下的 /阿jun/ 目录,不是整个目录树
        File f2 = new File("D:/阿jun修炼手册/阿jun");
        boolean flag = f2.mkdirs(); // 目录结构中有一个目录名不存在也没问题,会创建整个目录树
        System.out.println(flag); // true ,表示创建成功
    }
}

File 类-递归结构

递归本质是自己调自己或者间接调自己。
递归包含两个部分:
(1)递归头:什么时候不调用自身方法。如果没有递归头,将陷入死循环,即定义递归结束条件。
(2)递归体:什么时候需要调用自身方法

代码示例:递归边理目录结构和树状展示

package test.File;

import java.io.File;

// 测试文件如何递归
public class TestFile04 {
    public static void main(String[] args) {
        File file = new File("D:\\123");
        printFile(file,0);
    }
    /**
     * 打印文件信息
     * @param file 文件名称
     * @param level 层数(即目录树的层数)
     * */
    private static void printFile(File file, int level) {
        // 输出层次数
        for(int i = 0;i < level;i++){
            System.out.println("-");
        }
    // 文件名字过滤:获取目录名和 mp4 文件
    if (file.isDirectory()||file.getName().toLowerCase().endsWith(".mp4"))
        System.out.println(file.getName());
    // 如果 file 是目录,则获取子文件列表,并对每个子文件进行相同操作
    if (file.isDirectory()){
        File[] files = file.listFiles();  // 获取子文件列表
        for (File temp : files){
            // 递归调用该方法:注意 + 1
            printFile(temp,level + 1);
        }
    }
    }
}

枚举类型

简述

枚举只需要会普通用法就行,不用学高级用法
枚举类型的定于包括枚举声明和枚举体。
枚举体用于放置一些常量。
所有的枚举类型隐性地继承自 java.lang.Enum 。枚举实质是类。
每个被枚举的成员实质就是一个枚举的实例,默认是 public static final 修饰。可以通过枚举类型名使用它们。
当需要定义一组常量时,可以使用枚举类型。
尽量不使用枚举的高级特性,事实上高级特性都可以用普通类来实现,不必引用枚举,增加程序复杂度。

enum 枚举名 {
    枚举体(常量列表)
}

代码示例:枚举类型 + switch

package com.test;
import java.util.Random;

public class TestMeiJu {
    public static void main(String[] args) {
        // 调用枚举元素
        System.out.println(Season.AUTUMN); // AUTUMN
        // 枚举遍历
        for (Week k : Week.values()) {  // values()会返回 Week[] 里包含的所有枚举元素
            System.out.println(k);
        }
        // 将枚举元素放进数组里
        Week[] ws = Week.values();
        System.out.println(ws[1]); // 打印数组第二个枚举元素
        int a = new Random().nextInt(4); // 产生[0.3]的随机数 // Math.random()*4
        switch(Season.values()[a]){
            case SPRING:
                System.out.println("春天");
            case SUMMER:
                System.out.println("春天");
            case AUTUMN:
                System.out.println("春天");
            case WINTER:
                System.out.println("春天");
        }
    }
}

// 创建枚举类型
enum Week{
    星期一,星期二,星期三,星期四,星期五,星期六,星期天;
}
enum Season{
    SPRING,SUMMER,AUTUMN,WINTER;
}
posted @ 2022-01-17 09:44  阿jun  阅读(40)  评论(0编辑  收藏  举报