今天就跟大家聊聊有關使用Java如何刪除文本文件中特定行的內容,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
1.SpringMVC,Spring Web MVC是一種基于Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架。2.Shiro,Apache Shiro是Java的一個安全框架。3.Mybatis,MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。4.Dubbo,Dubbo是一個分布式服務框架。5.Maven,Maven是個項目管理和構建自動化工具。6.RabbitMQ,RabbitMQ是用Erlang實現的一個高并發高可靠AMQP消息隊列服務器。7.Ehcache,EhCache 是一個純Java的進程內緩存框架。
基于I/O流編寫的圖書館管理系統
在最近使用I/O流寫圖書館管理系統中管理員對圖書和用戶的管理操作時,遇到了需要刪除特定圖書和用戶的操作,在查詢資料和詢問老師后得知I/O流中沒有可以直接刪除單獨行的方法。
同時也為我提供了新的思路:將整個文件中的全部內容讀取出來,然后通過集合將每一行單獨存放,通過查找到集合內特定的內容后,將該行內容刪除,此時list集合會自動將后面的內容填補上來,再重新寫入的時候不會出現空行的情況。這時再重新遍歷一次該集合,將現在的集合內容寫入文件中,此時再看文件,已經完成了刪除需要刪除的特定行內容了!
下面我以我項目中刪除書籍的方法為例,具體講解該如何解決該問題
先看一下我存入的書籍文件:
通過上圖可以看到,我在寫入文件時,每一個屬性中間添加了一個“,”作為分隔符,這樣我們將文件中內容讀取到集合之后可以通過split(","); 直接將文件中讀出的每行的內容通過數組的形式將每一個屬性分隔開,方便我們通過數組下標直接訪問相應的屬性。
同時由上圖可知:此時我的書籍文件中存在7本書籍,除了紅樓夢被“張三”借出外,其他書籍均未被借出。
那我們在刪除書籍的時候就會遇到一個問題,若我需要刪除的書籍是一本被用戶借出的書籍在邏輯上我們應該不允許該書籍被刪除。所以在程序設計時我們應該避免刪除被用戶借出后未歸還的書籍。
具體判斷邏輯如下:
/** * 對書籍.txt文件中特定的書籍進行刪除: * 1.讀出文件中的內容,將其存放在一個String類型的集合中 * 2.通過分隔符將集合的每一位分割開存放到數組中 * 3.通過數組下標查找是否有該書籍 * 否: * 輸出信息,跳出程序return; * 是: * 4.通過數組下標查找該書是否有人借閱 * 是: * 輸出信息,跳出程序return; * 否: * 5.通過遍歷刪除集合中該位所對應的內容 * 6.將更新后的集合信息寫入文件中,完成刪除書籍操作 */
有了程序的具體邏輯之后,我們就可以開始寫代碼了:
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; } //若該書籍存在,判斷書籍對應用戶位是否存在用戶 //若對應位用戶不為“無”,則表示該書籍有人借出,則無法刪除該書籍 //同時告知管理員(打?。┰摃荒奈挥脩艚璩錾形礆w還 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如何刪除文本文件中特定行的內容有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。