io流实现对.txt文件的增删改查操作(文件中某一行内容的增加删除修改)

目录

一、要求

二、完整代码

三、结果演示

四、增删改查代码分析


一、要求

        我们需要利用io流对.txt文件中某行或者某几行内容进行增加、删除、修改操作,查看文件全部内容。

使用的类:

File

FileRead           --              BufferedReader

FileWriter          --              BufferedWriter

二、完整代码

Books:类

package com.nanchu;import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;/*** @Author 南初* @Create 2024/2/29 8:44* @Version 1.0*/
public class Books {private String bookName;private String bookPrice;private String bookNum;Scanner scan = new Scanner(System.in);// 添加图书public void addBook(File file) throws IOException {BufferedReader bufferedReader =  new BufferedReader(new FileReader(file));ArrayList<String> strb = new ArrayList<>();System.out.print("\n请输入图书名:");String name = scan.next();System.out.print("\n请输入图书价格:");String price = scan.next();System.out.print("\n请输入图书数量:");String num = scan.next();String addBook =name+","+price+","+num;String line =null;while((line = bufferedReader.readLine())!=null){strb.add(line);}strb.add(addBook);BufferedWriter bw = new BufferedWriter(new FileWriter(file));;for(String info:strb){bw.write(info);bw.newLine();}// 关闭文件流bw.flush();bw.close();bufferedReader.close();System.out.println("添加图书成功!");}// delete 删除图书public void deleteBook(File file) throws IOException {BufferedReader bufferedReader = new BufferedReader(new FileReader(file));ArrayList<String> strb = new ArrayList<>();System.out.println("请输入删除图书序号:");int bookID=scan.nextInt();  //修改图书序号String line = null;while((line = bufferedReader.readLine())!=null){strb.add(line);}int x = strb.size();while(true){if (bookID >= 0 &&bookID < x) {break;}else {System.out.println("输入错误,请重新输入删除图书序号:");bookID=scan.nextInt();  //修改图书序号}}System.out.println(strb.get(bookID));// 集合中删除图书strb.remove(bookID);BufferedWriter bw = new BufferedWriter(new FileWriter(file));for(String info :strb){bw.write(info);bw.newLine();}System.out.println("删除图书成功!");bw.flush();bw.close();bufferedReader.close();}// 修改图书public void alterBook(File file) throws IOException {BufferedReader bufferedReader = new BufferedReader(new FileReader(file));ArrayList<String> strb = new ArrayList<>();String line = null;int count=0;System.out.print("请输入修改图书序号:");int bookID=scan.nextInt();  //修改图书序号while((line = bufferedReader.readLine())!=null){if(count == bookID){String[] strings = line.split(",");System.out.print("\n请输入图书名:");String name = scan.next();strings[0] = name;System.out.print("\n请输入图书价格:");String price = scan.next();strings[1] = price;System.out.print("\n请输入图书数量:");String num = scan.next();strings[2] = num;line =String.join(",", strings);strb.add(line);System.out.println("修改图书成功!");}else {strb.add(line);}count++;}BufferedWriter bw = new BufferedWriter(new FileWriter(file));for(String info: strb){bw.write(info);bw.newLine();}bw.flush();bw.close();bufferedReader.close();}//  查看所有图书public void viewAllBook(File file) throws IOException {System.out.println("序号\t\t\t书名\t\t\t价格\t\t\t数量");BufferedReader bufferedReader = new BufferedReader(new FileReader(file));String line = null;for(int i=0;(line=bufferedReader.readLine())!=null;i++){String[] strings = line.split(",");System.out.print(i +"\t\t\t");for(int j=0;j<strings.length;j++){System.out.print(strings[j]+"\t\t\t");}System.out.print("\n");}bufferedReader.close();}}

ioFile类: 

package com.nanchu;import java.io.*;
import java.util.Scanner;/*** @Author 南初* @Create 2024/2/29 8:36* @Version 1.0*/
public class IoFile {public static void main(String[] args) {File file = new File("E:\\Java Code base\\FoodOrderingSystem\\src\\com\\nanchu\\test.txt");Books books = new Books();Scanner scan = new Scanner(System.in);while(true) {System.out.println("------请选择你的操作------");System.out.println("1.增   2.删   3.改   4.查   5.退出");System.out.print("请选择你需要的操作(这里默认输入除了1234之外的数字认为是退出):");int num = scan.nextInt();if (num == 1) {// 增try {books.addBook(file);} catch (IOException e) {throw new RuntimeException(e);}} else if (num==2) {// 删try {books.deleteBook(file);} catch (IOException e) {throw new RuntimeException(e);}} else if (num==3) {// 改try {books.alterBook(file);} catch (IOException e) {throw new RuntimeException(e);}} else if (num==4) {// 查try {books.viewAllBook(file);} catch (IOException e) {throw new RuntimeException(e);}}else {break;}}System.out.println("运行结束!");}
}

test.txt

C,50.0,30
Java,40.0,50
Go,50.0,20

三、结果演示

增加操作:

 test.txt文件查看增加成功:

删除操作:

 test.txt文件查看删除成功:

修改数据操作:

  test.txt文件查看修改成功:

四、增删改查代码分析

增删改思想:

        1. 将  .txt  文件内容全部读取出来

        2. 创建ArrayList集合储存读取出来的内容

        3. 针对需要修改的某行或者或几行内容从ArrayList集合中取出进行增删改操作

        4. 创建BufferedWriter 对象 传入(new FileWriter(file)) ,而不是(new FileWriter(file,true)) 因为不需要将内容追加,增加true,意思是在原文件内容后面追加新内容,我们这里做的是将储存的内容写入到文件中,需要的是原文件的空白文件,不加true意思是覆盖已有的文件。

        5.  关闭流

        

对于输出流来说,File类的对象是可以不存在的。
   > 如果File类的对象不存在,则可以在输出的过程中,自动创建File类的对象
   > 如果File类的对象存在,
      > 如果调用FileWriter(File file)或FileWriter(File file,false),输出时会新建File文件覆盖已有的文件
      > 如果调用FileWriter(File file,true)构造器,则在现有的文件末尾追加写出内容。

增:

Scanner scan = new Scanner(System.in);// 添加图书public void addBook(File file) throws IOException {BufferedReader bufferedReader =  new BufferedReader(new FileReader(file));ArrayList<String> strb = new ArrayList<>();System.out.print("\n请输入图书名:");String name = scan.next();System.out.print("\n请输入图书价格:");String price = scan.next();System.out.print("\n请输入图书数量:");String num = scan.next();String addBook =name+","+price+","+num;String line =null;while((line = bufferedReader.readLine())!=null){strb.add(line);}strb.add(addBook);BufferedWriter bw = new BufferedWriter(new FileWriter(file));;for(String info:strb){bw.write(info);bw.newLine();}// 关闭文件流bw.flush();bw.close();bufferedReader.close();System.out.println("添加图书成功!");}

删:

    Scanner scan = new Scanner(System.in);// delete 删除图书public void deleteBook(File file) throws IOException {BufferedReader bufferedReader = new BufferedReader(new FileReader(file));ArrayList<String> strb = new ArrayList<>();System.out.println("请输入删除图书序号:");int bookID=scan.nextInt();  //修改图书序号String line = null;while((line = bufferedReader.readLine())!=null){strb.add(line);}int x = strb.size();while(true){if (bookID >= 0 &&bookID < x) {break;}else {System.out.println("输入错误,请重新输入删除图书序号:");bookID=scan.nextInt();  //修改图书序号}}System.out.println(strb.get(bookID));// 集合中删除图书strb.remove(bookID);BufferedWriter bw = new BufferedWriter(new FileWriter(file));for(String info :strb){bw.write(info);bw.newLine();}System.out.println("删除图书成功!");bw.flush();bw.close();bufferedReader.close();}

改:

Scanner scan = new Scanner(System.in);
// 修改图书
public void alterBook(File file) throws IOException {BufferedReader bufferedReader = new BufferedReader(new FileReader(file));ArrayList<String> strb = new ArrayList<>();String line = null;int count=0;System.out.print("请输入修改图书序号:");int bookID=scan.nextInt();  //修改图书序号while((line = bufferedReader.readLine())!=null){if(count == bookID){String[] strings = line.split(",");System.out.print("\n请输入图书名:");String name = scan.next();strings[0] = name;System.out.print("\n请输入图书价格:");String price = scan.next();strings[1] = price;System.out.print("\n请输入图书数量:");String num = scan.next();strings[2] = num;line =String.join(",", strings);strb.add(line);System.out.println("修改图书成功!");}else {strb.add(line);}count++;}BufferedWriter bw = new BufferedWriter(new FileWriter(file));for(String info: strb){bw.write(info);bw.newLine();}bw.flush();bw.close();bufferedReader.close();
}

查:

Scanner scan = new Scanner(System.in);
//  查看所有图书
public void viewAllBook(File file) throws IOException {System.out.println("序号\t\t\t书名\t\t\t价格\t\t\t数量");BufferedReader bufferedReader = new BufferedReader(new FileReader(file));String line = null;for(int i=0;(line=bufferedReader.readLine())!=null;i++){String[] strings = line.split(",");System.out.print(i +"\t\t\t");for(int j=0;j<strings.length;j++){System.out.print(strings[j]+"\t\t\t");}System.out.print("\n");}bufferedReader.close();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/497890.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript】面试手撕防抖

引入 防抖可是前端面试时最频繁考察的知识点了&#xff0c;首先&#xff0c;我们先了解防抖的概念是什么。咳咳。&#x1f440; 防抖&#xff1a; 首先它是常见的性能优化技术&#xff0c;主要用于处理频繁触发的浏览器事件&#xff0c;如窗口大小变化、滚动事件、输入框内容…

MySQL 的数据库操作,利用Spring Boot实现MySQL数据库的自动创建

执行 show databases; 命令可以查看当前数据库的所有数据库。 注意在 MySQL 客户端执行 SQL 语句的时候要带上分号 ; 并按下 enter 键&#xff0c;不然 MySQL 会认为你还没有输入完&#xff0c;会换一行继续等待你输入。 OK&#xff0c;像上面截图中的 information_schema、mys…

如何使用IDEA连接MySQL数据库 - 一篇全面的指南

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【Algorithms 4】算法(第4版)学习笔记 13 - 番外篇:二叉查找树的几何应用(下篇)

文章目录 前言参考目录学习笔记4&#xff1a;区间搜索树&#xff08;interval search trees&#xff09;4.1&#xff1a;一维区间搜索4.2&#xff1a;区间搜索树定义4.3&#xff1a;区间搜索树 demo 演示4.3.1&#xff1a;插入4.3.2&#xff1a;搜索命中4.3.3&#xff1a;搜索未…

本届挑战赛冠军方案:基于LLM的多场景智能运维

本文介绍本届挑战赛冠军得主SRE-Copilot团队的参赛方案&#xff1a;基于LLM的多场景智能运维。 基础架构-SRE&#xff0c;负责字节跳动基础架构部门所有组件的SRE工作&#xff0c;沿着成本、稳定性、效率、服务四条主线&#xff0c;致力于打造高扩展、高可用的生产系统。基础架…

IntelliJ IDEA 使用 spring Initializr 快速搭建 spring boot 项目遇到的坑

maven使用的是3.5.3 一、创建SpringBoot 二、项目创建成功&#xff0c;启动右键&#xff0c;没有run方法 三、在pom.xml上右键&#xff0c;将其添加为maven项目&#xff0c;然后发现Test模块报错 四、查看pom.xml文件&#xff0c;发现2.3.5Release版本变红&#xff0c;怀疑是版…

基于springboot实现的牙科诊所系统

一、系统架构 前端&#xff1a;html | layui | js | css 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、 代码及数据库 三、功能介绍 01. web端-首页 02. web端-医生介绍 03. web端-新闻资讯 04. web端-关于我们 05. web…

Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位

运动相机设计用于在各种运动和极限环境中使用&#xff0c;如徒步、登山、攀岩、骑行、滑翔、滑雪、游泳和潜水等&#xff0c;它们通常具有防抖防震、深度防水和高清画质的特点&#xff0c;能够适应颠簸剧烈的环境&#xff0c;甚至可以承受一定程度的摔落&#xff0c;一些运动相…

云原生精品资料合集(附下载)

云计算是产业数字化转型的关键基础设施,以基础设施资源为中心的云搬迁时代接近尾声&#xff0c;以应用价值为中心的云原生时代已经到&#xff0c;所以IT人员学习云原生正当时&#xff01;最近跟各位大神征集了云原生的教程&#xff0c;行业报告和最佳实践&#xff0c;总有一款适…

Go语言学习-下载

下载网址 https://go.dev/dl/ 选择合适的版本&#xff0c;下载 解压包&#xff0c;按引导下载 完成后打开终端 输入指令 go version看到下载好的版本&#xff0c;就是完成下载了

Unity 常用操作

2D素材网站 https://craftpix.net/ https://itch.io/game-assets/tag-2d/tag-backgrounds 3D素材资源网址 https://www.mixamo.com/#/ 场景常用操作&#xff1a; 快捷键&#xff1a;QWER Q&#xff1a;Q键或鼠标中键&#xff0c;可以拉动场景。 W&#xff1a;选中物体后&…

全局路由守卫报重定向错误

一、报错内容 但是这种情况下&#xff0c;会报路由重定向的错误&#xff0c;如下&#xff1a; Uncaught (in promise) Error: Redirected when going from “/home?_presNosearchoutNo” to “/presSearch” via a navigation guard. 二、报错原因 要给这个项目的所有路由…