快递e栈(控制台简易版)——IO流

/**

  • 读取数据

  • @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)]

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值