java手机进库程序:txt文件当做小型数据库实现增删改查,存储json数据到txt实体类的序列化和反序列化,修改txt中内容,Jackson操作,io流写入和输出

手机进库


1.程序介绍

学习:jackson操作和io流

使用txt做数据库持久化数据,数据库存储json数据。实现查看,插入,增加。

程序在springboot项目运行,也可以在普通项目运行,请自行导入Jackson的jar包

1.1 txt文件

image-20221015210851022

1.2 查看:

  • 将文件的字符串使用Json反序列化为对象,循环将属性输出
image-20221015210749785

1.3 插入

  • scanner接收数据,序列化为字符串,再用字符流写入到文件
image-20221015213244880

image-20221015211314287

1.4 修改

  • 将文件内容反序列化,用list存放实体类,循环中用equals判断是否与txt中的型号相等,相等就修改实体类属性。将文件清空,再序列化实体类集合到文件。
image-20221015211508797

删除功能:删除全部和删除某个。实例化一个字符输出流对象就会清除文件内所有内容,除非参数加上true。删除某个可以清除文件内容然再重新写入,利用循环判断是否存入文件,删除可自行实现。

2.代码

  • 实体类

    package com.lvyp.sprintboottest01.bean;
    
    import com.fasterxml.jackson.annotation.JsonInclude;
    
    @JsonInclude(JsonInclude.Include.NON_NULL) // 不展示值为Null的属性
    public class Phone {
        String phoneName;
        double size;
        double price;
        String config;
        int storeAmount;
        double sumPrice;
        public Phone() {
        }
    
        public String getPhoneName() {
            return phoneName;
        }
    
        public void setPhoneName(String phoneName) {
            this.phoneName = phoneName;
        }
    
        public double getSize() {
            return size;
        }
    
        public void setSize(double size) {
            this.size = size;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        public String getConfig() {
            return config;
        }
    
        public void setConfig(String config) {
            this.config = config;
        }
    
        public int getStoreAmount() {
            return storeAmount;
        }
    
        public void setStoreAmount(int storeAmount) {
            this.storeAmount = storeAmount;
        }
    
        public double getSumPrice() {
            return sumPrice;
        }
    
        public void setSumPrice(double sumPrice) {
            this.sumPrice = sumPrice;
        }
    
        @Override
        public String toString() {
            return "Phone{" +
                    "phoneName='" + phoneName + '\'' +
                    ", size=" + size +
                    ", price=" + price +
                    ", config='" + config + '\'' +
                    ", storeAmount=" + storeAmount +
                    ", sumPrice=" + sumPrice +
                    '}';
        }
    }
    
    
  • 实现类:

    package com.lvyp.sprintboottest01.jacksonTest;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.lvyp.sprintboottest01.bean.Phone;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    public class PhoneTest {
        private static final ObjectMapper mapper = new ObjectMapper(); // jackson主要操作类
    	// 将json字符串反序列化为实体类存入list集合并返回
        public static List<Phone> read() throws IOException {
            BufferedReader reader = new BufferedReader(new FileReader("./SprintBootTest01/src/main/resources/static/database.txt"));
            String info = null;
    
            ArrayList<Phone> list = new ArrayList<>();
            for (int i = 0; (info = reader.readLine())!=null; i++) {
                Phone phone = mapper.readValue(info, Phone.class);
                list.add(phone);
    
            }
            return list;
        }
        // scanner接收数据返回实体类
        public static Phone scanValue(){
            Scanner scan = new Scanner(System.in);
            Phone phone = new Phone();
            System.out.print("品牌型号:");
            phone.setPhoneName(scan.next());
            System.out.print("尺寸:");
            phone.setSize(scan.nextDouble());
            System.out.print("价格:");
            phone.setPrice(scan.nextDouble());
            scan.nextLine();// 先将double的回车读取了
            System.out.print("配置:");
            phone.setConfig(scan.nextLine());
            System.out.print("库存:");
            phone.setStoreAmount(scan.nextInt());
            System.out.println("");
            return phone;
        }
        // 插入方法
        public static void write() throws IOException {
            BufferedWriter writer = new BufferedWriter(new FileWriter("./SprintBootTest01/src/main/resources/static/database.txt",true));
            BufferedReader reader = new BufferedReader(new FileReader("./SprintBootTest01/src/main/resources/static/database.txt"));
            Phone phone = scanValue();
            phone.setSumPrice(phone.getPrice()*phone.getStoreAmount());
    
            String info = null;
            Phone readValue;
            int flag = 0;
            while ((info = reader.readLine())!=null) {
                readValue = mapper.readValue(info, Phone.class);
                if ((phone.getPhoneName().equals(readValue.getPhoneName()))){
                    flag = 1;
                    break;
                }
            }
            if(flag == 0){
                String s = mapper.writeValueAsString(phone);
                writer.write(s+"\r\n");
                writer.close();
                System.out.println("插入成功");
                return;
            }
            System.out.println("插入失败");
        }
        // 更新方法
        public static void update() throws IOException {
            BufferedWriter writer = null;
            Scanner scanner = new Scanner(System.in);
            List<Phone> phoneList = read();
    
    
            System.out.println("请输入要修改的手机名字");
            String phoneName = scanner.next();
            int i;
            int flag = 0;
            for (i = 0; i < phoneList.size(); i++) {
                if ((phoneList.get(i).getPhoneName().equals(phoneName))) {
                    flag = 1;
                    break;
                }
            }
            if (flag == 0) {
                System.out.println("没有此手机");
                return;
            }
            System.out.println("请输入要修改的内容:输入1修改名字,输入2修改尺寸,输入3修改价格,输入4修改配置,输入5修改库存");
            int num = scanner.nextInt(); // 要修改的项
            switch (num){
                case 1:
                    phoneList.get(i).setPhoneName(scanner.next());
                    break;
                case 2:
                    phoneList.get(i).setSize(scanner.nextDouble());
                    break;
                case 3:
                    phoneList.get(i).setPrice(scanner.nextDouble());
                    break;
                case 4:
                    phoneList.get(i).setConfig(scanner.next());
                    break;
                case 5:
                    phoneList.get(i).setStoreAmount(scanner.nextInt());
                    break;
            }
            // 先清空一次,只要实例化字符输出流就会清空文件的内容
            writer = new BufferedWriter(new FileWriter("./SprintBootTest01/src/main/resources/static/database.txt"));
            // 写入文件
            for (int j = 0; j < phoneList.size(); j++) {
                String str = mapper.writeValueAsString(phoneList.get(j));
                writer.write(str+"\r\n");
    
            }
            writer.close();
    
        }
        // 展示清单功能1
        public static void show () throws IOException {
            List<Phone> phones;
            phones = read();
            double sum =0;
            int sumAmount = 0;
            if (phones.size()==0){
                System.out.println("清单为空");
                return;
            }
            System.out.println("---------------------------库存清单-------------------");
            System.out.println("型号   尺寸    价格        配置          库存数量        总价格");
            for (int j = 0; j < phones.size(); j++) {
                System.out.println(phones.get(j).getPhoneName()+"   "+
                        phones.get(j).getSize()+"   "+
                        phones.get(j).getPrice()+"   "+
                        phones.get(j).getConfig()+"     "+
                        phones.get(j).getStoreAmount()+"        "+
                        phones.get(j).getSumPrice());
                sum = sum + phones.get(j).getSumPrice();
                sumAmount = sumAmount + phones.get(j).getStoreAmount();
            }
            System.out.println("-------------------------------------------------");
            System.out.println("总库存:"+sum);
            System.out.println("库存总价:"+sumAmount);
        }
        
        public static void main(String[] args) throws IOException {
    
            Scanner scanner = new Scanner(System.in);
    
            while(true){
                System.out.println("输入1查看清单,输入2插入,输入3修改,输入4退出");
                int i = scanner.nextInt();
                if (i == 1){
                    show ();
                } else if (i == 2){
                    write();
                } else if (i==3){
                    update();
                } else if (i==4){
                    return;
                }else {
                    System.out.println("输入错误,重新输入");
                }
            }
    
        }
    }
    
    

有什么错误, 请指指点点。。。。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
  一.JAVA程序传送到手机的方法:   JAVA程序传送到手机的方法有4种,分别是手机上网直接下载安装,通过电脑下载到本地 后,然后通过读卡器,数据线,蓝牙,红外线传输JAVA程序手机.具体方法说明如下.   1.手机上网下载:   通过手机上网下载以及使用短信定购的方式,直接在手机的个人文档或者应用程序找 到(根据手机各不相同),无需在安装,直接可以在类似"我的文件夹"之类的选项找到。   使用电脑下载就需要将文件传送到手机上。   2. 读卡器:   1 新买的卡,先在手机上格式你的 TF 卡:设置 -- 手机状态 -- 存储存储设备 - - 卡 -- 菜单键 -- 格式 OK      或先安装 TF 卡到手机上采取拍照,录象的方式,激活 TF 卡的文件夹。 如果是 已经使用的就不必了...   2 .将我的电脑 -- 工具 - 文件夹选项 - 查看的,隐藏文件文件夹 -- 选显示   3 .打开我的电脑 -- 工具 - 文件夹选项 - 查看,把 " 隐藏受保护的操作系统文 件 " 前面的勾去掉   4.然后用读卡器打开你的 TF ,就可以看见 TF 卡上的 KJAVA 了。 copy JAVA程序(包 括 *.JAR,*.JAD)到你 TF 卡的 KJAVA 目录里就行了   5 .安装 TF 卡到手机。   6 .进入手机 " 游戏 和应用程序)里安装新的程序 OK   3.数据线传输:   通过安装购买手机时所附带的 软件 安装盘,安装其pc套件,用数据线接上手机与电脑, 通过管理 软件 把JAVA程序文件*.JAD,*.JAR传送到手机上;MIDWAY2.8 也可以传输 JAVA 程序,但是需要开启 JAVA 设置的 "JAVA 加载器 "     二、安装问题-相关说明 1. 如何安装Kjava程序   JAVA平台的手机软件一般有两个文件,一个是jar,一个是jad。 诺基亚等品牌的机器 需要两个文件都传入手机才能正常使用。   而索爱等品牌的手机只需要一个jar文件就可以用了。具体情况要根据你自己的手机来 确定。   如果你是下载至电脑本地安装,你的手机需要用到.jad文件才能完成安装. 通过数据 线,红外或蓝牙等方式把两个文件[.jar,.jad]存到手机上同一个目录即可。      2.如何安装Symbian程序   Symbian软件安装包通常是.sis的压缩文件,其包含许多组件文件。   安装步骤如下 :   (1) 安装文件可以通过蓝牙连接或红外连接发送至手机.   (2) 在手机收到信息后,打开新信息,选择打开->安装   (3) 按照提示一步一步操作下去,直到安装完成   3.如何安装微软SmartPhone智能手机软件    在使用微软操作系统的SmartPhone上安装软件,有三种方法:   1)直接拷贝法 与电脑类似,在智能手机上也流行"绿色软件"一说。这一类软件只须将相关文件 Copy到手机存储卡上,然后建立一快捷方式,并将其拖入"Storage\windows\Start Menu" 文件夹。欲使用该软件,只须进入"开始"菜单即可。 小知识:与电脑不同,使用微软操作系统的SmartPhone并未自带资源管理器,因此 须要自行安装,否则无法进行文件操作。推荐使用Explorer 2003。   (2)CAB文件安装法   如果下载的软件为*.CAB格式,那么请先用数据线或者读卡器将该文件Copy到SD卡等 附加储存卡上(不推荐Copy到手机内置闪存上)。然后打开资源管理器(笔者使用的是 Explorer 2003文版),选文件按OK键执行安装。一般来说,系统会弹出警告,点击确 定即可。 有的软件可能会选择安装路径,选择安装路径,建议选择将软件安装到储存卡上。安装 完毕后,就可以在开始菜单找到该软件的快捷方式了。   (3)EXE文件安装法    前两种文件的安装都比较简单,但如果遇到*.EXE文件,那么安装起来就稍显繁复。首 先,必须在电脑里安装Microsoft ActiveSync同步软件;其次,须要一根同步数据线或红外 /蓝牙适配器(推荐使用数据线)。当这两者都齐备后,就可以进行安装了。   Microsoft ActiveSync联线后,双击运行*.EXE文件会看到一个安装界面。选择一个目 录,单击安装,安装文件会自动解压并传送数据手机。在电脑屏幕上弹出提示时,就要换 为手机操作了。按照手机屏幕上的提醒,选择将软件安装在手机或者储存卡上即可。   安装java程序要有两个文件,一个是JAR和JAD, 但拷贝下来的游戏只
好的,我来回答你的问题。 首先,你需要在Qt项目添加QxOrm库。可以通过以下步骤实现: 1. 从QxOrm官方网站下载最新版本的QxOrm库,然后解压缩到你的项目目录。 2. 在Qt的.pro文件添加以下内容: ``` INCLUDEPATH += path/to/qxorm/include LIBS += -Lpath/to/qxorm/lib -lqxorm ``` 这样就可以在Qt项目使用QxOrm库了。 接下来,你需要将xml文件数据添加到数据库。可以通过以下步骤实现: 1. 定义一个QxOrm类来表示xml文件数据。 2. 使用QxOrm的反序列化功能将xml文件数据转换为QxOrm类的对象。 3. 使用QxOrm的ORM功能将QxOrm类的对象存储数据库。 下面是一个示例代码: ``` #include <QxOrm/QxOrm.h> #include <QFile> #include "myxmlclass.h" int main() { // 初始化QxOrm库 qx::QxInitQxOrm(); // 读取xml文件 QFile xmlFile("data.xml"); if (!xmlFile.open(QIODevice::ReadOnly)) { qWarning() << "Failed to open XML file"; return -1; } // 反序列化xml文件 myxmlclass xmlData; qx::serialization::xml::from_file(xmlData, xmlFile); // 将数据存储数据库 qx::dao::ptr<myxmlclass> dao = qx::dao::create<myxmlclass>(); dao->insert(xmlData); // 关闭xml文件 xmlFile.close(); // 从数据库查询数据 QList<myxmlclass_ptr> dataList; dao->fetch_all(dataList); // 修改数据 dataList[0]->setAttribute("name", "new name"); dao->update(dataList[0]); // 删除数据 dao->remove(dataList[0]); // 将数据导出为xml文件 QFile outputFile("output.xml"); if (!outputFile.open(QIODevice::WriteOnly)) { qWarning() << "Failed to open output file"; return -1; } qx::serialization::xml::to_file(dataList, outputFile); // 关闭输出文件 outputFile.close(); // 清理QxOrm库资源 qx::QxUninitQxOrm(); return 0; } ``` 最后,你需要将数据库数据导出为xml文件。可以通过以下步骤实现: 1. 使用QxOrm的查询功能从数据库查询数据。 2. 使用QxOrm的序列化功能将查询结果转换为xml文件格式。 3. 将xml文件写入文件。 下面是一个示例代码: ``` #include <QxOrm/QxOrm.h> #include <QFile> #include "myxmlclass.h" int main() { // 初始化QxOrm库 qx::QxInitQxOrm(); // 从数据库查询数据 QList<myxmlclass_ptr> dataList; qx::dao::ptr<myxmlclass> dao = qx::dao::create<myxmlclass>(); dao->fetch_all(dataList); // 将数据导出为xml文件 QFile outputFile("output.xml"); if (!outputFile.open(QIODevice::WriteOnly)) { qWarning() << "Failed to open output file"; return -1; } qx::serialization::xml::to_file(dataList, outputFile); // 关闭输出文件 outputFile.close(); // 清理QxOrm库资源 qx::QxUninitQxOrm(); return 0; } ``` 希望这个回答能够帮助到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值