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;
}
偷偷向银河要了一把碎星✨只等你闭上眼睛撒入你的梦中。