面试(四)——Java 八大包装类、String 、日期类及文件操作核心类 File全解析
在 Java 编程世界里,有许多核心类在数据处理、文件操作等场景中扮演着关键角色。下面我们将详细介绍八大包装类、String
及日期类,还有文件操作核心类 File
,帮助大家全方位掌握这些重要工具。
一、八大包装类
Java 为基本数据类型提供了对应的包装类,使得基本数据类型可以像对象一样参与面向对象的操作(如泛型、集合操作等)。八大基本数据类型及其对应的包装类如下:
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
(一)包装类的主要作用
- 装箱与拆箱
- 装箱:将基本数据类型转换为对应的包装类对象。例如:
int num = 10;
Integer integer = Integer.valueOf(num); // 手动装箱,也可直接写 Integer integer = num;(自动装箱)
- 拆箱:将包装类对象转换为对应的基本数据类型。例如:
Integer integer = new Integer(20);
int num = integer.intValue(); // 手动拆箱,也可直接写 int num = integer;(自动拆箱)
自动装箱和拆箱是 Java 5 及以后版本提供的特性,让基本数据类型和包装类之间的转换更加便捷。
2. 类型转换与操作
包装类提供了大量的方法,用于基本数据类型与字符串之间的转换,以及对数据的各种操作。比如 Integer.parseInt("123")
可以将字符串 "123"
转换为 int
类型的 123
;Integer.toBinaryString(5)
可以将整数 5
转换为二进制字符串 "101"
。
二、String 字符串
String
类用于表示字符串,它是不可变的,即一旦创建,其值就不能被修改。每次对 String
对象进行操作(如拼接、替换等),都会生成一个新的 String
对象。
(一)常用方法
- 字符串拼接:可以使用
+
运算符或者concat()
方法。例如:
String str1 = "Hello";
String str2 = "World";
String result = str1 + str2; // 结果为 "HelloWorld"
String result2 = str1.concat(str2); // 结果也为 "HelloWorld"
- 字符串查找与截取:
indexOf()
方法用于查找子字符串的位置,substring()
方法用于截取子字符串。例如:
String str = "Java Programming";
int index = str.indexOf("Program"); // 返回 5,因为 "Program" 从索引 5 开始
String subStr = str.substring(5); // 返回 "Programming"
- 字符串替换与分割:
replace()
方法用于替换字符或子字符串,split()
方法用于分割字符串。例如:
String str = "Hello,Java,World";
String newStr = str.replace(",", "-"); // 结果为 "Hello-Java-World"
String[] parts = str.split(","); // 分割为 ["Hello", "Java", "World"]
(二)可变字符串
由于 String
是不可变的,当需要频繁对字符串进行修改操作时,使用 String
会产生大量中间对象,影响性能。这时可以使用可变字符串类 StringBuilder
和 StringBuffer
。
- StringBuilder:非线程安全,效率高,适用于单线程环境下的字符串拼接等操作。例如:
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
String result = sb.toString(); // 结果为 "Hello World"
- StringBuffer:线程安全,效率相对较低,适用于多线程环境下的字符串操作。其用法与
StringBuilder
类似。
三、日期类(Date)
java.util.Date
类用于表示特定的瞬间,精确到毫秒。
(一)常用构造方法和方法
- 构造方法:
Date()
构造一个表示当前时间的Date
对象;Date(long date)
构造一个表示从 1970 年 1 月 1 日 00:00:00 GMT 开始经过date
毫秒的Date
对象。
Date now = new Date(); // 表示当前时间
Date past = new Date(1000); // 表示从 1970-01-01 00:00:00 GMT 开始 1000 毫秒后的时间
- 获取时间相关信息:可以使用
getTime()
方法获取从 1970 年 1 月 1 日 00:00:00 GMT 到该Date
对象所表示时间的毫秒数。
Date date = new Date();
long time = date.getTime();
(二)SimpleDateFormat 类
Date
类本身的格式化输出功能有限,通常结合 SimpleDateFormat
类来对日期进行格式化和解析。
- 日期格式化:将
Date
对象格式化为指定格式的字符串。例如:
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(date);
System.out.println(formattedDate); // 输出类似 2023-10-25 15:30:45 的日期时间字符串
- 日期解析:将符合指定格式的字符串解析为
Date
对象。例如:
String dateStr = "2023-10-25 15:30:45";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {Date date = sdf.parse(dateStr);System.out.println(date);
} catch (ParseException e) {e.printStackTrace();
}
(三)Java 8 新日期时间 API
需要注意的是,Date
类在 Java 中存在一些设计上的不足,Java 8 引入了新的日期时间 API(位于 java.time
包下),如 LocalDate
、LocalTime
、LocalDateTime
、DateTimeFormatter
等,这些类提供了更简洁、易用且线程安全的日期时间处理方式,在新的开发中更推荐使用。
四、文件操作核心类 File
在 Java 编程中,对文件和目录的操作是很常见的需求。java.io.File
类为我们提供了一系列方法,用于操作文件和目录的元数据(如名称、路径、大小、修改时间等),以及创建、删除文件或目录等操作。
(一)文件的构造器
File
类有多个构造方法,常用的有以下几种:
File(String pathname)
通过指定文件或目录的路径名字符串来创建File
对象。路径可以是绝对路径(如C:\Users\xxx\file.txt
),也可以是相对路径(相对于当前工作目录,如test\file.txt
)。示例:
File file = new File("D:\\test\\example.txt");
File(String parent, String child)
通过指定父路径名字符串和子路径名字符串来创建File
对象。这种方式可以更灵活地组合路径。示例:
File parentDir = new File("D:\\test");
File file = new File(parentDir, "example.txt");
File(File parent, String child)
通过指定父File
对象和子路径名字符串来创建File
对象,和上面的构造方法类似,只是父路径是一个File
对象。示例:
File parentDir = new File("D:\\test");
File file = new File(parentDir, "example.txt");
(二)文件的创建
- 创建文件使用
createNewFile()
方法可以创建一个新的空文件。如果文件所在的目录不存在,或者文件已经存在,该方法会返回false
,否则创建文件并返回true
。示例:
File file = new File("D:\\test\\newFile.txt");
try {boolean isCreated = file.createNewFile();if (isCreated) {System.out.println("文件创建成功");} else {System.out.println("文件创建失败,可能文件已存在或目录不存在");}
} catch (IOException e) {e.printStackTrace();
}
2.创建目录
mkdir()
:创建单级目录,如果父目录不存在,则创建失败,返回false
。示例:
File dir = new File("D:\\test\\newDir");
boolean isCreated = dir.mkdir();
if (isCreated) {System.out.println("目录创建成功");
} else {System.out.println("目录创建失败,可能父目录不存在");
}
mkdirs()
:创建多级目录,即使父目录不存在,也会递归创建所有需要的父目录,创建成功返回true
,否则返回false
。示例:
File dir = new File("D:\\test\\dir1\\dir2");
boolean isCreated = dir.mkdirs();
if (isCreated) {System.out.println("多级目录创建成功");
} else {System.out.println("多级目录创建失败");
}
(三)文件的删除
- 删除文件或空目录使用
delete()
方法可以删除文件或空目录。如果是文件,直接删除;如果是目录,必须保证该目录为空才能删除成功。删除成功返回true
,否则返回false
。示例:
File file = new File("D:\\test\\newFile.txt");
boolean isDeleted = file.delete();
if (isDeleted) {System.out.println("文件删除成功");
} else {System.out.println("文件删除失败,可能文件不存在或目录不为空");
}
- 注意事项
delete()
方法不会进入回收站,是直接从磁盘上删除文件或目录,所以使用时要格外小心,避免误删重要数据。
(四)文件的获取功能 API
File
类提供了丰富的方法来获取文件或目录的各种信息,以下是一些常用的方法:
- 获取基本信息
getName()
:获取文件或目录的名称。示例:
File file = new File("D:\\test\\example.txt");
String name = file.getName();
System.out.println("文件名称:" + name); // 输出 example.txt
getPath()
:获取构造File
对象时使用的路径字符串。示例:
File file = new File("D:\\test\\example.txt");
String path = file.getPath();
System.out.println("路径:" + path); // 输出 D:\test\example.txt
getAbsolutePath()
:获取文件或目录的绝对路径。示例:
File file = new File("test\\example.txt");
String absolutePath = file.getAbsolutePath();
System.out.println("绝对路径:" + absolutePath);
// 输出类似 C:\Users\xxx\project\test\example.txt(取决于当前工作目录)
length()
:获取文件的长度(以字节为单位),如果是目录,返回值没有明确意义。示例:
File file = new File("D:\\test\\example.txt");
long length = file.length();
System.out.println("文件长度:" + length + " 字节");
lastModified()
:获取文件或目录最后一次修改的时间,返回值是从 1970 年 1 月 1 日 00:00:00 GMT 到修改时间的毫秒数。可以通过new Date(lastModified())
转换为日期对象。示例:
File file = new File("D:\\test\\example.txt");
long lastModifiedTime = file.lastModified();
Date date = new Date(lastModifiedTime);
System.out.println("最后修改时间:" + date);
2.判断文件或目录属性
isFile()
:判断是否是文件。示例:
File file = new File("D:\\test\\example.txt");
if (file.isFile()) {System.out.println("这是一个文件");
} else {System.out.println("这不是一个文件");
}
isDirectory()
:判断是否是目录。示例:
File dir = new File("D:\\test");
if (dir.isDirectory()) {System.out.println("这是一个目录");
} else {System.out.println("这不是一个目录");
}
exists()
:判断文件或目录是否存在。示例:
File file = new File("D:\\test\\example.txt");
if (file.exists()) {System.out.println("文件或目录存在");
} else {System.out.println("文件或目录不存在");
}
3.列出目录内容
list()
:返回目录下所有文件和目录的名称字符串数组,如果是文件或者目录不存在,返回null
。示例:
File dir = new File("D:\\test");
String[] names = dir.list();
if (names != null) {for (String name : names) {System.out.println(name);}
}
listFiles()
:返回目录下所有文件和目录的File
对象数组,如果是文件或者目录不存在,返回null
。示例:
File dir = new File("D:\\test");
File[] files = dir.listFiles();
if (files != null) {for (File file : files) {System.out.println(file.getName() + ":" + (file.isFile() ? "文件" : "目录"));}
}
掌握八大包装类、String
、日期类以及 File
类的使用,能让你在 Java 数据处理、字符串操作、日期时间处理和文件操作等场景中更加得心应手。需要注意的是,File
类主要是对文件和目录的元数据进行操作,若要进行文件内容的读写,还需要结合输入输出流(如 FileInputStream
、FileOutputStream
、BufferedReader
、BufferedWriter
等)来实现。