/**
-
读取数据
-
@param fileName 文件名
-
@return ois.readObject()
-
@throws ClassNotFoundException
-
@throws IOException
*/
public static Object readFile(String fileName) throws ClassNotFoundException, IOException {
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
return ois.readObject();
}
/**
-
写入数据
-
@param obj
-
@param fileName
-
@throws IOException
*/
public static void writeFile(Object obj,String fileName) throws IOException {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
}
}
涉及到文件读写,所以我们需要在数据存取的Dao层添加一些代码。
ExpressDao
//将同一包下的子包中的类导入进来,这两行代码需自行导包,不能直接复制
import mission.demo04.express.Express;
import mission.demo04.util.IOUtil;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
//数据存取的dao层
public class ExpressDao {
private static final String FILE_NAME = “express.txt”;//将文件名设置为 express.txt
static Map<String, Express> expressMap = new TreeMap<>();//key为快递单号,value为快递信息
//初始化快递柜,默认添加几个快递
public ExpressDao() {
expressMap.put(“1001”,new Express(“1001”,“中通快递”,123456,1,3));
expressMap.put(“1002”,new Express(“1002”,“圆通快递”,456789,2,7));
expressMap.put(“1003”,new Express(“1003”,“顺丰速递”,123789,6,2));
}
/**
-
初始化数据
-
如果文件不存在,则创建文件
-
如果文件存在,则初始化,从文件中读入数据
*/
static{
File file = new File(FILE_NAME);
if(!file.exists()){//如果文件不存在,则创建文件
try {
if(file.createNewFile()){
System.out.println(“文件创建成功!”);
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}else{
try {
Object obj = IOUtil.readFile(FILE_NAME);//读取
if(obj != null && obj instanceof Map){//如果对象不为空,并且是Map集合
expressMap = (Map<String, Express>) obj;
}
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}
}
}
/**
-
添加快递
-
@param express
-
@return express
*/
public static Express add(Express express){
Random random = new Random();
if(expressMap.size() == 100){
try {
throw new Exception(“快递柜已满!不能放入快递了!”);
} catch (Exception e) {
e.printStackTrace();
}
}
int x,y;
do{
x = random.nextInt(10);
y = random.nextInt(10);
}while(isExist(x,y));
int code;
do{
code = random.nextInt(100000)+900000;
}while(isExistCode(code));
express.setCode(code);
express.setX(x);
express.setY(y);
expressMap.put(express.getNumber(),express);
try {
IOUtil.writeFile(expressMap,FILE_NAME);
} catch (IOException e) {
e.printStackTrace();
}
return express;
}
/**
-
判断快递柜是否已存在快递
-
@param x
-
@param y
-
@return true/false
*/
public static boolean isExist(int x, int y){
for(Express express : expressMap.values()){
if(express.getX() == x && express.getY() == y){
return true;
}
}
return false;
}
/**
-
判断取件码是否已经存在
-
@param code
-
@return true/false
*/
public static boolean isExistCode(int code){
for(Express express : expressMap.values()){
if(express.getCode() == code){
return true;
}
}
return false;
}
/**
-
根据快递单号查找快递,返回快递对象
-
@param number
-
@return express/null
*/
public Express findExpressByNumber(String number){
for(Express express : expressMap.values()){
if(express.getNumber().equals(number)){
return express;
}
}
return null;
}
/**
-
根据快递单号查找快递,如果不存在返回-1
-
@param number
-
@return 1/-1
*/
public static int findExpressIsExist(String number){
for(Express express:expressMap.values()){
if(express.getNumber().equals(number)){
return 1;
}
}
return -1;
}
/**
-
根据快递单号删除快递
-
@param number
-
@return true
*/
public static boolean delete(String number) {
expressMap.remove(number);
try {
IOUtil.writeFile(expressMap,FILE_NAME);
} catch (IOException e) {
e.printStackTrace();
}
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
[外链图片转存中…(img-1yRaVDUe-1721188008644)]