用java的IO流实现基于本地文件的商品管理系统

1.IO流的概念

  • Java中的IO(input和output)是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。java.io 包下提供了大量的供我们使用的操作【流】的方法和接口,用于进行各类数据的处理和传输。

2.流的分类

  1. 按照流的 流向分 可分为:
  • 输入流: 只能从中读取数据,而不能向其写入数据。
  • 输出流:只能向其写入数据,而不能向其读取数据。
  1. 按照操作单元划分 可分为:
  • 字节流:是一个字节一个字节的读取或写入
  • 字符流:是一个字符一个字符的读取或写入,一个字符就是两个字节,主要用来处理字符。
  1. 按照角色划分
  • 节点流:直接从/向一个特定的IO设备(如磁盘,网络)读/写数据的流,称为节点流
  • 处理流:“连接”在已存在的流(节点流或处理流)之上通过对数据的处理为程序提供更为强大的读写功能的流。
  1. Java输入/输出流体系中常用的流的分类表

jack liu

3.进行商品管理系统的代码编写

(1)新建一个商品类 用于储存 商品的信息

//这里我使用了内部类 所以我的商品类是私有的
 private static class Goods {
        private int id;
        private String name;
        private int price;

        public Goods() {
        }

        public Goods(int id, String name, int price) {
            this.id = id;
            this.name = name;
            this.price = price;
        }

        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 int getPrice() {
            return price;
        }

        public void setPrice(int price) {
            this.price = price;
        }
    }

(2)运用switch语句让用户进行输入来选择使用的功能


 
/**
 * @author jack liu
 * * @date 2023/4/21 16:10
 */

import java.io.*;
import java.util.*;

    //全局的scanner方法 方便调用
    private static Scanner scanner = new Scanner(System.in);
    //要操作的文件
    private static final String PATH = "path";

    public static void main(String[] args) {

//这里定义了 六个方法 分别是 增加 删除 修改 查询所有 查找一个 和退出
        while (true) {
            System.out.println("请选择功能:1、插入新商品 2、删除商品 3、修改商品 4,输出所有商品 5、查找一个商品 6,退出");
            int function = scanner.nextInt();
            switch (function) {
                case 1:
                    insert();
                    break;
                case 2:
                    delete();
                    break;
                case 3:
                    update();
                    break;
                case 4:
                    selectAll();
                    break;
                case 5:
                    findOne();
                    break;
                case 6:
                    System.exit(-1);
                    break;
            }
        }
    }

(3)写几个 公共的方法 减少代码的冗余 提高代码的复用率

     //这个方法用于查找所有的商品 并返回
    private static List<Goods> findAllGoods() {
        List<Goods> list = new ArrayList<>();
        try (Reader reader = new FileReader(Shop.PATH);
             BufferedReader bufferedReader = new BufferedReader(reader);
        ) {
            String goods;

            while ((goods = bufferedReader.readLine()) != null) {
                String[] goodElem = goods.split(" ");
                Goods goodsItem = new Goods(Integer.parseInt(goodElem[0]),
                        goodElem[1],
                        Integer.parseInt(goodElem[2]));
                list.add(goodsItem);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }

//这个方法 用于把用户输入 的商品信息写入到文件中 传入两个参数 分别是 用户输入的 商品 封装成一个list集合 和 是否对文件进行覆盖 
 public static void writer(List<Goods> allGoods, Boolean append) {
        try (Writer writer = new FileWriter(Shop.PATH, append);
             BufferedWriter bufferedWriter = new BufferedWriter(writer);
        ) {
            for (Goods goods : allGoods) {
                bufferedWriter.write(goods.getId() + " " + goods.getName() + " " + goods.getPrice());
                bufferedWriter.newLine();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

(4)添加商品的功能

  • 使用了stream流的方法 对用户输入的id进行判断是否重复
  • 如果有不懂stream的朋友们的话可以去看我上一篇文章java8 Stream编程详解
 private static void insert() {

        boolean flag = true;
        Integer id = null;
        while (flag) {
            System.out.println("请输入商品编号:");
            id = scanner.nextInt();
            final int i = id;
            //使用了stream编程 判断id是否重复
            Optional<Goods> first = findAllGoods().stream().filter(goods -> goods.getId() == i).findFirst();
            flag = first.isPresent();
            if (flag) {
                System.out.println("这个编号已经存在");
            }
        }

        System.out.println("请输入商品名字");
        String name = scanner.next();
        System.out.println("请输入商品价格");
        int price = scanner.nextInt();

        writer(Arrays.asList(new Goods(id,name,price)),true);
    }

(5)删除商品的功能

  private static void delete() {
        System.out.println("请输入商品编号:");
        int id = scanner.nextInt();
        List<Goods> allGoods = findAllGoods();
        Iterator<Goods> iterator = allGoods.iterator();
        //使用的了集合中的 iterator 迭代器 对集合进行遍历
        while (iterator.hasNext()) {
            Goods goods = iterator.next();
            if (goods.getId() == id) {
                iterator.remove();
            }
        }
        writer(allGoods, false);
    }

(6)修改商品信息的功能

  private static void update() {
        System.out.println("请输入商品编号:");
        int id = scanner.nextInt();
         System.out.println("请输入商品名字");
         String name = scanner.next();
         System.out.println("请输入商品价格");
         Integer price = scanner.nextInt();
        List<Goods> allGoods = findAllGoods();
        Iterator<Goods> iterator = allGoods.iterator();
          //使用的了集合中的 iterator 迭代器 对集合进行遍历
        while (iterator.hasNext()) {
            Goods goods = iterator.next();
            if (goods.getId() == id) {
                goods.setName(name);
                goods.setPrice(price);
            }
        }
        writer(allGoods, false);
    }

(7)打印所有商品信息的功能

 private static void selectAll() {
        List<Goods> allGoods = findAllGoods();
        for (Goods goods : allGoods) {
            System.out.println(goods.getId() + " " + goods.getName() + " " + goods.getPrice());
        }

    }

(8)查找一个商品的功能


    private static void findOne() {
        System.out.println("请输入商品编号:");
        int id = scanner.nextInt();
        List<Goods> allGoods = findAllGoods();
         //使用了stream编程 判断id是否相等 如果相等 就打印这条信息
        Optional<Goods> first = allGoods.stream().filter(goods -> goods.getId() == id).findFirst();
        first.ifPresent(goods -> {
            System.out.println(goods.getId() + " " + goods.getName() + " " + goods.getPrice());
        });
    }

4.实现的效果

在这里插入图片描述

以上就是 java的IO流实现的基于本地文件的商品管理系统的全部内容!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值