广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java基础之删除文本文件中特定行的内容
  • 704
分享到

Java基础之删除文本文件中特定行的内容

2024-04-02 19:04:59 704人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、问题的产生二、解决思路三、具体解决方法四、总结一、问题的产生 基于I/O流编写的图书馆管理系统 在最近使用I/O流写图书馆管理系统中管理员对图书和用户的管理操作时,遇到了需要

一、问题的产生

基于I/O流编写的图书馆管理系统

在最近使用I/O流写图书馆管理系统中管理员对图书和用户的管理操作时,遇到了需要删除特定图书和用户的操作,在查询资料和询问老师后得知I/O流中没有可以直接删除单独行的方法。

二、解决思路

同时也为我提供了新的思路:将整个文件中的全部内容读取出来,然后通过集合将每一行单独存放,通过查找到集合内特定的内容后,将该行内容删除,此时list集合会自动将后面的内容填补上来,再重新写入的时候不会出现空行的情况。这时再重新遍历一次该集合,将现在的集合内容写入文件中,此时再看文件,已经完成了删除需要删除的特定行内容了!

三、具体解决方法

下面我以我项目中删除书籍的方法为例,具体讲解该如何解决该问题

先看一下我存入的书籍文件:

书籍存放文件

通过上图可以看到,我在写入文件时,每一个属性中间添加了一个“,”作为分隔符,这样我们将文件中内容读取到集合之后可以通过split(","); 直接将文件中读出的每行的内容通过数组的形式将每一个属性分隔开,方便我们通过数组下标直接访问相应的属性。

同时由上图可知:此时我的书籍文件中存在7本书籍,除了红楼梦被“张三”借出外,其他书籍均未被借出。

那我们在删除书籍的时候就会遇到一个问题,若我需要删除的书籍是一本被用户借出的书籍在逻辑上我们应该不允许该书籍被删除。所以在程序设计时我们应该避免删除被用户借出后未归还的书籍。

具体判断逻辑如下:


 

有了程序的具体逻辑之后,我们就可以开始写代码了:


import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class DeleteBook {

    private String bookDelete;
    String[] bookinf = new String[8];
    String[] bookinf1 = new String[8];

    public void deleteBook() throws IOException {
        File file = new File("书籍.txt");
        FileInputStream intput = new FileInputStream(file);
        BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
        String tempString;//定义一个字符串,每一次读出该行字符串内容
        List<String> list = new ArrayList<>();//定义一个list字符串集合用来储存每一行的字符串信息
        while ((tempString = reader.readLine()) != null) {
            list.add(tempString);
        }
        System.out.println("==========当前书籍有==========");
        //遍历字符串集合
        for (String book : list) {
            bookinf = book.split(",");//将‘,‘作为分隔符,将字符串分隔开存放进入数组中
            System.out.print(bookinf[0] + " ");
        }
        System.out.println("");
        //输入要删除的内容
        System.out.println("请输入要删除的书籍名称:");
        Scanner scanner = new Scanner(System.in);
        bookDelete = scanner.next();

        //查询该用户是否有未归还的书籍,如果存在未归还的书籍,将不能删除该用户的信息
        FileInputStream inputStream = new FileInputStream(file);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String bookString;
        List<String> bookList = new ArrayList<>();
        while ((bookString = bufferedReader.readLine()) != null) {
            bookList.add(bookString);
        }
        boolean have = false;//是否存在书籍
        for (String borrowUser : bookList) {
            bookinf = borrowUser.split(",");
            //判断书籍是否存在
            if (bookDelete.equals(bookinf[0])) {
                have = true;
            }
            //若该书籍存在,判断书籍对应用户位是否存在用户
            //若对应位用户不为“无”,则表示该书籍有人借出,则无法删除该书籍
            //同时告知管理员(打印)该书籍被哪位用户借出尚未归还
            if (!"无".equals(bookinf[6]) && have) {
                System.out.println("该书籍尚未被用户“" + bookinf[6] + "”归还,请在其归还书籍后再进行操作!");
                return;
            }
        }
        //若书籍不存在,输出相应信息后直接跳出程序
        if (have == false) {
            System.out.println("无法找到该书籍,请重新确认后再进行操作!");
            return;
        }
        for (String delBook : list) {
            bookinf1 = delBook.split(",");
            //找到即将删除的书籍在集合中的位置,将该部分内容从集合中删除,然后清空整个文件
            if (bookDelete.equals(bookinf1[0])) {
                list.remove(delBook);//在集合中删除该行
                FileWriter fd = new FileWriter(file, false);//append传入false表示写入内容时将会覆盖文件中之前存在的内容
                fd.write("");//执行删除操作,写入空内容覆盖之前的内容
                fd.close();
                break;
            }
        }

        //重新遍历一遍更改后的集合,将内容重新写入文件内
        for (String user : list) {
            bookinf1 = user.split(",");
            FileWriter fw = new FileWriter(file, true);//append传入true表示写入内容时将不会覆盖文件中之前存在的内容,将新的内容写在之前内容的后面
            fw.write(bookinf1[0] + "," + bookinf1[1] +
                    "," + bookinf1[2] + "," + bookinf1[3] +
                    "," + bookinf1[4] + "," + bookinf1[5] +
                    "," + bookinf1[6] + "," + bookinf1[7]);//执行重新写入内容的操作,将修改过的集合通过数组读下标后,再重新存写入文件中
            fw.write(System.getProperty("line.separator"));//在段落后添加一个换行符
            fw.close();
        }
        System.out.println("删除成功!");
    }

我们添加一个main方法试运行一下:


public static void main(String[] args) throws IOException {
        DeleteBook db = new DeleteBook();
        db.deleteBook();
    }

运行前文件中的书籍信息:

运行前文件中的书籍信息

当我们输入一本未被借出的书籍时:

输入未借出的书籍

此时文件中的书籍信息:

删除魔戒后文件中的书籍信息

可以看到,魔戒已经从文件中消失,在魔戒下一行的霍比特人顶上来了,并未出现空行的情况。

我们再输入一本被借出的书籍,看一看会出现什么情况:

输入已被借出尚未归还的书籍

可以看到,输出结果是书籍未被用户张三归还,并且文件中的书籍红楼梦没有被删除。

最后我们来输入一本不存在于文件中的书籍:

输入不存在的书籍

因为之前我们将魔戒从文件中删除,此时无法找到该书籍。

四、总结

在java中想要直接通过I/O流中的方法将整个文件中的特定的某一行删除是不行的,此时我们需要转变思路,将I/O流中直接对文件的操作,转换为通过将文件中的内容读到集合中,再对集合进行操作,最后再将集合写入文件中。

到此这篇关于Java基础之删除文本文件中特定行的内容的文章就介绍到这了,更多相关Java中删除文本行的内容内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java基础之删除文本文件中特定行的内容

本文链接: https://www.lsjlt.com/news/124095.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java基础之删除文本文件中特定行的内容
    目录一、问题的产生二、解决思路三、具体解决方法四、总结一、问题的产生 基于I/O流编写的图书馆管理系统 在最近使用I/O流写图书馆管理系统中管理员对图书和用户的管理操作时,遇到了需要...
    99+
    2022-11-12
  • 使用Java如何删除文本文件中特定行的内容
    今天就跟大家聊聊有关使用Java如何删除文本文件中特定行的内容,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MV...
    99+
    2023-06-14
  • Java基础之查找文本特定内容后进行修改
    一、问题的产生 基于I/O流编写的图书馆管理系统 在最近使用I/O流写图书馆管理系统中有修改图书信息的部分,以及借书和还书等多个部分内容都需要对文本中的特定位置的内容进行精确查找并修...
    99+
    2022-11-12
  • Java实现文件夹中内容定时删除
    今天我和大家分享一下用Java实现对一个文件夹中内容定时删除。 让我们来看一下对一个文件夹中内容定时删除的功能。 对于文件的删除就是用File类中的delete()方法删除当前Fil...
    99+
    2022-11-12
  • sed删除文件中的一行内容的脚本代码
    先来看下原始文件的内容: root@localhost ~]# cat file.txthello worlda:b:c -h -na:b:c -h -n sed根据条件删除相关的行: [root@loca...
    99+
    2022-06-04
    脚本 代码 文件
  • python如何删除文件中的指定内容
    要删除文件中的指定内容,可以按以下步骤操作:1. 打开文件,读取内容并存储在变量中。2. 使用字符串的 `replace()` 方法...
    99+
    2023-10-07
    python
  • sed怎么删除文件中的一行内容
    这篇文章主要介绍“sed怎么删除文件中的一行内容”,在日常操作中,相信很多人在sed怎么删除文件中的一行内容问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”sed怎么删除文件中的一行内容”的疑惑有所帮助!接下来...
    99+
    2023-06-09
  • Linux bash删除文件中含“指定内容”的行功能示例
    本文实例讲述了Linux bash删除文件中含“指定内容”的行功能。分享给大家供大家参考,具体如下: #!/bin/sh # 功能: 删除文件中含"指定内容"的行 # 运行方式: ./dline....
    99+
    2022-06-04
    示例 行功 文件
  • 怎么在Linux中使用bash命令删除文件中含“指定内容”的行
    怎么在Linux中使用bash命令删除文件中含“指定内容”的行?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:#!/bin/sh# 功能:&n...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作