实用类
一、日期类
1.1 Date
|----|---------------------|
| 标记 | 描述 |
| y | 年,yyyy表示4位数的年份 |
| M | 月,MM表示2位数的月份 |
| d | 天,dd表示2位数的天数 |
| H | 小时,HH表示2位数的24小时制的时间 |
| h | 小时,hh表示2位数的12小时制的时间 |
| m | 分钟,mm表示2位数的分钟数 |
| s | 秒,ss表示2位数的秒数 |
java
package com.date;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
//格式化日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(simpleDateFormat.format(new Date()));
}
}
J
1.2 Calendar
|--------------------------------------|---------|
| 常量 | 描述 |
| public static final int YEAR | 年 |
| public static final int MONTH | 月 |
| public static final int DAY_OF_MONTH | 天,以月为单位 |
| public static final int DAY_OF_YEAR | 天,以年为单位 |
| public static final int HOUR_OF_DAY | 小时 |
| public static final int MINUTE | 分钟 |
| public static final int SECOND | 秒 |
| public static final int MILLISECOND | 毫秒 |
|--------------------------------------|----------------------|
| 方法 | 描述 |
| public static Calendar getInstance() | 获取系统对应的Calendar实例化对象 |
| public void get(int field,int value) | 给静态常量赋值 |
| public int get(int field) | 取出静态常量 |
| public final Date getTime() | 获取Calendar对应的Date对象 |
java
package com.date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Test {
public static void main(String[] args) {
//今天所在的周是今年的第几周
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,2026);
//月份从0开始算
calendar.set(Calendar.MONTH,4);
calendar.set(Calendar.DAY_OF_MONTH,28);
System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));
//今天之后的52天日期
int i = calendar.get(Calendar.DAY_OF_YEAR);
calendar.set(Calendar.DAY_OF_YEAR , (i+52));
Date time = calendar.getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(simpleDateFormat.format(time));
}
}
二、IO流
2.1 File类
|------------------------------------|----------------|
| 方法 | 描述 |
| public File(String path) | 根据路径创建文件对象 |
| public String getName() | 获取文件名 |
| public String getParent() | 获取文件所在的目录 |
| public File getParentFile() | 获取文件所在的目录对应的文件 |
| public String getPath() | 获取文件路径 |
| public boolean exists() | 判断对象是否存在 |
| public boolean isDirectory() | 判断对象是否为目录 |
| public boolean idFile() | 判断对象是否为文件 |
| public long length() | 获取文件的大小 |
| public boolean createNewFile() | 根据当前对象创建文件 |
| public boolean delete() | 删除对象 |
| public boolean mkdir() | 创建文件夹 |
| public boolean renameTo(File file) | 为已存在的文件重命名 |
java
package com;
import java.io.File;
import java.io.IOException;
public class IOTest {
public static void main(String[] args) {
File file = new File("D:\\java\\test.txt");
System.out.println(file);
if (file.exists()) {
System.out.println(file + "文件存在");
System.out.println(file.getName()); //获取文件名
System.out.println(file.getPath());//获取文件路径
System.out.println(file.getParent());//获取文件所在的目录
System.out.println(file.isFile());//判断是否为文件
File file1 = new File(file.getParent());
System.out.println(file1.isDirectory());//判断是否为目录
System.out.println(file.length());//获取文件长度,以字节为单位
}else {
System.out.println(file + "文件不存在,请创建");
try {
file.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
2.2 字节流
- 按方向分,分为输入流和输出流
- 按单位分,分为字节流和字符流
输入字节流 InputStream
|-------------------------------------------------|-------------------------|
| 方法 | 描述 |
| public int read() | 以字节为单位读取数据,一次读一个字母 |
| public int read(byte\[\] bytes) | 将数据存入byte数组,返回数据长度 |
| public int read(byte\[\] bytes,int off,int len) | 将数据存入byte数组的指定区间,返回数据长度 |
| public int available() | 返回当前数据流中未读取的数据个数 |
| public void close() | 关闭数据流 |
InputStream是抽象类,不能直接使用,使用其子类 FileInputStream
java
package com;
import java.io.*;
public class InputStreamTest {
public static void main(String[] args) throws Exception {
InputStream inputStream = new FileInputStream("D:\\java\\test.txt");
// System.out.println(inputStream.read()); //读取第一个 注释掉,不注释掉的话,这里读了第一个,for循环里读出来的就会少一个,读完了,返回-1
File file = new File("D:\\java\\test.txt");
long length = file.length();
for (long i = 0; i < length; i++) {
System.out.println(inputStream.read());
}
System.out.println("---------------------------------");
inputStream = new FileInputStream("D:\\java\\test.txt");
int temp = 0;
while((temp = inputStream.read()) != -1){
// System.out.println(inputStream.read());//相当于读了两次,文件中存储abcdef,最后只会输出bdf的值
System.out.println(temp);
}
}
}
java
package com;
import java.io.*;
public class InputStreamTest {
public static void main(String[] args) throws Exception {
InputStream inputStream = new FileInputStream("D:\\java\\test.txt");
// byte[] bytes = new byte[3]; //数组长度为3
// int length1 = inputStream.read(bytes); //将数据存入byte数组,返回数据长度 97,98,99
byte[] bytes = new byte[6]; //数组长度为6
int length1 = inputStream.read(bytes,2,3); //将数据存入byte数组的指定区间,返回数据长度 0,0,97,98,99
System.out.println(length1);
for(byte abytes : bytes){
System.out.println(abytes);
}
inputStream = new FileInputStream("D:\\java\\test.txt");
int temp = 0;
System.out.println(inputStream.available());
while((temp = inputStream.read()) != -1){
System.out.println(temp);
System.out.println(inputStream.available());//读一次输出一次 全部读完,返回0
}
inputStream.close();
}
}
输出字节流 OutputStream
|-----------------------------------------------|-------------------|
| 方法 | 描述 |
| public void write(int b) | 以字节为单位写数据 |
| public void write(byte\[\] b) | 将byte数组中的数据写出 |
| public void write(byte\[\] b,int off,int len) | 将byte数组中指定区间的数据写出 |
| public void close() | 关闭数据流 |
java
package com;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class OutputStreamTest {
public static void main(String[] args) throws Exception {
OutputStream outputStream = new FileOutputStream("D:/java/test2.txt");
// outputStream.write(99);//会转换成对应的字母"c"进行存储。下一次写入的数据会覆盖当前写入的数据
byte[] bytes = {97,98,99,100,101,102,103};
// outputStream.write(bytes); //写入abcdefg
outputStream.write(bytes,2,3); //写入cde
outputStream.close();
}
}
2.3 文件复制(字节流)
java
package com;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class FileCopyTest {
public static void main(String[] args) throws Exception{
InputStream inputStream = new FileInputStream("D:/java/test.txt");
OutputStream outputStream = new FileOutputStream("D:\\java\\test3.txt");
//方式1 :数据量大时,效率低
// int temp = 0;
// while((temp = inputStream.read()) != -1){
// outputStream.write(temp);
// }
//方式2
// byte[] bytes = new byte[6]; //明确知道文件的长度
// inputStream.read(bytes);
// outputStream.write(bytes);
byte[] bytes1 = new byte[1024]; //不知道文件长度,直接写1024,大于1024,继续加
int length = inputStream.read(bytes1);
outputStream.write(bytes1,0,length); //只写文件的长度,多余的空间不使用空格占位
inputStream.close();
outputStream.close();
}
}
2.4 字符流
输入字符流 Reader
|-------------------------------------------------|-------------------------|
| 方法 | 描述 |
| public int read() | 以字符为单位读取数据,一次读一个 |
| public int read(char\[\] chars) | 将数据读入char数组,并返回数据长度 |
| public int read(char\[\] chars,int off.int len) | 将数据读入char数组指定区间,并返回数据长度 |
| public void close() | 关闭数据流 |
当被读取的内容是英文或数字、符号,字节流和字符流输出结果一致。
因为英文一个字符就是一个字节
汉字一个字符是3个字节

java
package com;
import java.io.FileReader;
import java.io.Reader;
public class ReaderTest {
public static void main(String[] args) throws Exception {
Reader reader = new FileReader("D:\\java\\test3.txt");
// System.out.println(reader.read());
//输出文件中所有字符的ASCII码
// int temp = 0;
// while((temp = reader.read() )!= -1){
// System.out.println(temp);
// }
char[] chars = new char[1024]; //多余的都会用空格占用输出
int length = reader.read(chars,0,4);
System.out.println(length);
for(char achar : chars){
System.out.println(achar);
}
reader.close();
}
}
输出字符流 Writer
|---------------------------------------------------|--------------------|
| 方法 | 描述 |
| public void write(int c) | 以字符为单位写数据,一次写一个 |
| public void write(char\[\] chars) | 将char数组中的数据写入 |
| public void write(char\[\] chars,int off,int len) | 将char数组指定区间的数据写入 |
| public void write(String str) | 将String类型的数据写入 |
| public void write(String str,int off,int len) | 将String数组指定区间的数据写入 |
| public void close() | 关闭数据流 |
java
package com;
import java.io.FileWriter;
import java.io.Writer;
public class WriterTest{
public static void main(String[] args) throws Exception{
Writer writer = new FileWriter("D:\\java\\test2.txt");
writer.write(97);//输出c
char[] chars = {'测','试','数','据'};
writer.write(chars);//输出"测试数据"
writer.write(chars,2,1);//输出 数
String str = new String("字符串数据");
writer.write(str);//输出 字符串数据
writer.write(str,1,3);//输出符串数
writer.close(); //要关闭数据流,不然无法写入数据
}
}

2.5 文件复制(字符流)
java
package com;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;
public class FileReaderWriterTest {
public static void main(String[] args) throws Exception{
//字符流复制
Reader reader = new FileReader("D:\\java\\test2.txt");
Writer writer = new FileWriter("D:/java/copy.txt");
int temp = 0;
while((temp = reader.read()) != -1){
writer.write(temp);
}
reader.close();
writer.close();
}
}
如果文件中存储英文、数字或符号,字节流文件复制和字符流文件复制效率是一样的,如果存储的是汉字,字符流的效率是字节流复制的三倍。(一个汉字等于3字节)
复制图片时,使用字节流。
如果使用字符流,可拿到数据,但是无法打开(结构已经被破坏)。(字节是最基本的单位)
2.6 序列化和反序列化
如果要把一个Java对象存入文件中,则需要对该对象进行序列化处理。
从文件中读取对象,就是反序列化。
java
package com.xlh;
import java.io.Serializable;
public class User implements Serializable {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(Integer id,String name){
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
java
package com.xlh;
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception{
User user = new User(1,"张三");
//序列化:把对象存进文件中
OutputStream outputStream = new FileOutputStream("D:\\java\\test1.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(user);
objectOutputStream.close();
outputStream.close();
//反序列化:从文件中读取对象
InputStream inputStream = new FileInputStream("D:\\java\\test1.txt");
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
User user1 = (User) objectInputStream.readObject();
System.out.println(user1);
}
}

