激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java基礎之刪除文本文件中特定行的內容

Java基礎之刪除文本文件中特定行的內容

2021-09-10 12:05沒譜的曲 Java教程

這篇文章主要介紹了Java基礎之刪除文本文件中特定行的內容,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、問題的產生

基于i/o流編寫的圖書館管理系統

在最近使用i/o流寫圖書館管理系統中管理員對圖書和用戶的管理操作時,遇到了需要刪除特定圖書和用戶的操作,在查詢資料和詢問老師后得知i/o流中沒有可以直接刪除單獨行的方法。

二、解決思路

同時也為我提供了新的思路:將整個文件中的全部內容讀取出來,然后通過集合將每一行單獨存放,通過查找到集合內特定的內容后,將該行內容刪除,此時list集合會自動將后面的內容填補上來,再重新寫入的時候不會出現空行的情況。這時再重新遍歷一次該集合,將現在的集合內容寫入文件中,此時再看文件,已經完成了刪除需要刪除的特定行內容了!

三、具體解決方法

下面我以我項目中刪除書籍的方法為例,具體講解該如何解決該問題

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

Java基礎之刪除文本文件中特定行的內容

通過上圖可以看到,我在寫入文件時,每一個屬性中間添加了一個“,”作為分隔符,這樣我們將文件中內容讀取到集合之后可以通過split(","); 直接將文件中讀出的每行的內容通過數組的形式將每一個屬性分隔開,方便我們通過數組下標直接訪問相應的屬性。

同時由上圖可知:此時我的書籍文件中存在7本書籍,除了紅樓夢被“張三”借出外,其他書籍均未被借出。

那我們在刪除書籍的時候就會遇到一個問題,若我需要刪除的書籍是一本被用戶借出的書籍在邏輯上我們應該不允許該書籍被刪除。所以在程序設計時我們應該避免刪除被用戶借出后未歸還的書籍。

具體判斷邏輯如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
    * 對書籍.txt文件中特定的書籍進行刪除:
    * 1.讀出文件中的內容,將其存放在一個string類型的集合中
    * 2.通過分隔符將集合的每一位分割開存放到數組中
    * 3.通過數組下標查找是否有該書籍
    * 否:
    * 輸出信息,跳出程序return;
    * 是:
    * 4.通過數組下標查找該書是否有人借閱
    * 是:
    * 輸出信息,跳出程序return;
    * 否:
    * 5.通過遍歷刪除集合中該位所對應的內容
    * 6.將更新后的集合信息寫入文件中,完成刪除書籍操作
    */

有了程序的具體邏輯之后,我們就可以開始寫代碼了:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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方法試運行一下:

?
1
2
3
4
public static void main(string[] args) throws ioexception {
        deletebook db = new deletebook();
        db.deletebook();
    }

運行前文件中的書籍信息:

Java基礎之刪除文本文件中特定行的內容

當我們輸入一本未被借出的書籍時:

Java基礎之刪除文本文件中特定行的內容

此時文件中的書籍信息:

Java基礎之刪除文本文件中特定行的內容

可以看到,魔戒已經從文件中消失,在魔戒下一行的霍比特人頂上來了,并未出現空行的情況。

我們再輸入一本被借出的書籍,看一看會出現什么情況:

Java基礎之刪除文本文件中特定行的內容

可以看到,輸出結果是書籍未被用戶張三歸還,并且文件中的書籍紅樓夢沒有被刪除。

最后我們來輸入一本不存在于文件中的書籍:


Java基礎之刪除文本文件中特定行的內容

因為之前我們將魔戒從文件中刪除,此時無法找到該書籍。

四、總結

在java中想要直接通過i/o流中的方法將整個文件中的特定的某一行刪除是不行的,此時我們需要轉變思路,將i/o流中直接對文件的操作,轉換為通過將文件中的內容讀到集合中,再對集合進行操作,最后再將集合寫入文件中。

到此這篇關于java基礎之刪除文本文件中特定行的內容的文章就介紹到這了,更多相關java中刪除文本行的內容內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_43950569/article/details/115857955

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: 国产精品免费观看视频 | 久久免费视频在线 | 国产成人高清成人av片在线看 | 天天干干 | 欧美日本综合 | 久久中文一区 | 久久精品一区二区三区国产主播 | 欧美一级α| 欧美视频一区二区三区四区 | 国产视频精品在线 | 亚洲码无人客一区二区三区 | 91高清免费在线观看 | 色天使中文字幕 | 一级在线| 国产在线一级视频 | 精品国产91久久久久 | 久久久久久久久久久久久久av | 在线视频观看国产 | 国产一区网址 | 999精品国产 | 动漫孕妇被羞羞视频 | 国产精品三级a三级三级午夜 | 高清做爰免费无遮网站挡 | 日韩黄色片免费看 | 国产 日韩 一区 | 欧美日韩在线视频观看 | 国产免费传媒av片在线 | 中国大陆高清aⅴ毛片 | 国产乱一区二区三区视频 | 国产黄色一级大片 | 久久久久亚洲精品国产 | 一区二区三区四区免费 | 成人福利视频在线观看 | 亚洲天堂在线电影 | 成人三级电影在线 | 嗯哈~不行好大h双性 | chinese 军人 gay xx 呻吟 | 少妇一级淫片免费看 | 欧美在线国产 | 免费视频精品一区二区 | 免费放黄网站在线播放 |