在JAVA高级阶段时我们学习了许多我们常用到的类,如:关于日期的Datle类,SimpleDateFormat类,Calendar类。关于文件的File类, 异常中的处理异常。集合中Collection接口(List接口,Set接口),Map接口。IO流,线程等等。
日期类
SimpleDateFormat类:用于格式化日期的类。
Calendar类:表示日历的类,包含了很多日历相关的信息。
从2022/12/1日起开始三天打鱼俩天晒网,输入2022/12/1日之后的日期判断是在打鱼还是在晒网
String patte="yyyy/MM/dd";
//(指定日期格式为yyyy/MM/dd)
SimpleDateFormat spf=new SimpleDateFormat(patte);
Date date=spf.parse("2022/12/1");
Scanner sc=new Scanner(System.in);
System.out.println("请输入时间");
String date1=sc.nextLine();
Date date2=spf.parse(date1);
///(根据你输入的日期的毫秒数减去2022/12/1的毫秒数)
long sum=date2.getTime()-date.getTime();
//判断相差的天数%5是否小于3
if((sum/1000/3600/24)%5<3){
//小于3说明在打鱼
System.out.println(date1+" 在打鱼");
}else {
//否则在晒网
System.out.println(date1+" 在晒网");
}
运行结果
文件类File
Java中的File类,表示本地硬盘中的文件(文件和目录)的一个类。 通过这个类创建的对象,可以操作对应的文件。
复制一个文件夹
定义复制单文件的方法
/*
* 定义单文件的方法
* */
public static void copyFile(File source,File target){
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream(source);
fos=new FileOutputStream(target);
byte[] bytes=new byte[1024*1024*8];
int count=fis.read(bytes);
while (count!=-1){
fos.write(bytes,0,count);
count=fis.read(bytes);
}
}catch (FileNotFoundException e){
System.out.println("文件不存在"+e);
}catch (IOException e){
System.out.println("读写异常"+e);
}finally {
try {
if(fis!=null){
fis.close();
}
if(fos!=null){
fos.close();
}
}catch (IOException e){
System.out.println("关闭流异常"+e);
}
}
定义复制文件夹方法
/*
* 定义复制文件夹方法
* */
public static void copyDir(File source,File target){
//如果是文件,调用单文件复制方法
if(source.isFile()){
copyFile(source,target);
}else {
//创建要复制的文件夹
target.mkdir();
//展开原文件夹
for (File child : source.listFiles()) {
//定义复制后的新目标文件
//这里使用File(File parent,String child)
File newTarget=new File(target,child.getName());//复制过去的文件要与原文件相同
//递归
copyDir(child,newTarget);
}
}
}
main方法
public class Copy {
public static void main(String[] args) {
File source = new File("E:\\文件");
File target = new File("E:\\文件副本");
//copyFile(source, target);
copyDir(source,target);
}
异常
当程序没有按开发人员的意愿正常执行,中途出现错误导致程序中断,出现这种情况,就称为异常
异常在程序中以对象的形式存在。当代码执行过程中出现异常,虚拟机会自动创建一个异常对象,如果 没有对象该异常对象进行处理,就会导致程序中断,不再执行后续代码。
异常的分类
处理异常
方式一:try-catch-finally语句
try{
//可能出现异常的代码
}catch(异常类 异常对象){
//如果出现异常对象,且与catch小括号中的异常类型匹配,就会执行这里的代码
}catch(异常类 异常对象){
//如果出现异常对象,且与catch小括号中的异常类型匹配,就会执行这里的代码
}finally{
//无论程序是否会抛出异常,都要执行的代码
}
执行流程
方式二:throws关键字
public class Test{
public void fun() throws InterruptException{//这时该方法就会有一个声明:该方法可能
会抛出异常
//这句话直接写完后,会报错,因为sleep()方法可能会抛出InterruptException异常,属于
编译时异常,必须要处理
Thread.sleep(500);
}
}
集合
Collection接口
该接口有两个核心子接口:List和Set
ArrayList实现类:采用数组实现的集合
例如:模拟"斗地主"游戏发牌
package Honework1or2;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class Main {
public static void main(String[] args) {
final ArrayList<String> list = new ArrayList<>();
final ArrayList<String> list1 = new ArrayList<>();
final ArrayList<String> list2 = new ArrayList<>();
final ArrayList<String> list3 = new ArrayList<>();
final ArrayList<String> list4 = new ArrayList<>();
String[] colours = new String[]{"♥", "♣", "♠", "♦"};
String[] sd = new String[]{"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
for (int i = 0; i < colours.length; i++) {
for (int j = 0; j < sd.length; j++) {
list.add(colours[i] + sd[j]);
}
}
list.add("大王");
list.add("小王");
Collections.shuffle(list);
Random rd = new Random();
int c = list.size();
int w = 1;
int w1 = 1;
int w2 = 1;
for (int i = 0; i < c; i++) {
final int n = rd.nextInt(list.size());
if (w < c/3) {
list1.add(list.get(n));
w++;
} else if (w1 < c/3) {
list2.add(list.get(n));
w1++;
} else if (w2 < c/3) {
list3.add(list.get(n));
w2++;
}else {
list4.add(list.get(n));
}
list.remove(n);
}
System.out.println("玩家1");
for (String s : list1) {
System.out.print(s + "\t");
}
System.out.println();
System.out.println("玩家2");
for (String s : list2) {
System.out.print(s + "\t");
}
System.out.println();
System.out.println("玩家3");
for (String s : list3) {
System.out.print(s+"\t");
}
System.out.println();
System.out.println("底牌");
for (String s : list4) {
System.out.print(s+"\t");
}
}
}
运行结果
LinkedList实现类:采用双向链表实现的集合
Map接口
· HashMap实现类
Map称为映射,数据以键值对的形式保存。保存的是键与值的对应关系。 键称为Key,值称为Value,键不能重复,键允许出现一个null作为键,值无限制。 键和值都是引用类型。 如,yyds就是一个键key,代表了一个含义:“永远单身”即为值value。
IO流
流Stream
将内存中的数据存入到硬盘中,称为写write,也称为输出Output。
将硬盘中的数据存入到内存中,称为读read,也称为输入Input。
FileInputStream文件字节输入流
在通过FileInputStream对象使用read(byte[] bytes)方法时,每次读取指定数组的字节,将读取到 的字节保存在字节数组中,该方法返回读取到的字节数量。如果最后一次读取的字节数不足字节数 组的大小时,只会将读取到内容覆盖数组中最前的几个元素。所以会导致读取到的内容多于实际内 容
FileOutputStream文件字节输出流
在通过FileOutputStream对象使用write(byte[] bytes)方法时,会将字节数组中的所有内容写入到 输出流中,在最后一次写入时,可能会写入多余的内容。所以在写入时,最好使用write(byte[] bytes,int off,int lef)方法,表示将字节数组中的内容,从off开始写入len个。
FileReader文件字符输入流
FileWriter文件字符输出流
BufferedReader缓冲字符输入流
读取文本
public static void main(String[] args) throws IOException {
//创建有缓冲区的字符流入对象
BufferedReader br=new BufferedReader(new FileReader("C:\\Users\\加贝\\Desktop\\华清\\221001.txt"));
/*String[] strings=new String[100];
int n=0;*/
final ArrayList<String> list = new ArrayList<>();
//判断是否还有字符
while (br.ready()) {
final String name = br.readLine();
list.add(name);
//读取整行
//System.out.println(br.readLine());
}
br.close();
//打乱集合中的元素
Collections.shuffle(list);
for (int i=0;i<3;i++){
System.out.println(list.get(i));
}
BufferedWriter缓冲字符输出流
//如果要追加在new FilrWriter("文件名"true)设置
final BufferedWriter bw = new BufferedWriter(new FileWriter( "C:\\Users\\加贝\\Desktop\\华清\\作业情况.txt",true));
// bw.write("");
//换行
bw.newLine();
for (int i=0;i<3;i++){
bw.write(list.get(i));
bw.newLine();
}
bw.close();
}
}
总结
经过一周的学习,只能说对这些类容有一定的映像,但离完全掌握还有不小的距离,只能在后面的日子里多多实践,多多温习,做到熟能生巧,也让我对Java越来越感兴趣了