【實驗7-3】? 日記本
【任務介紹】
? 1.任務描述
編寫一個日記本功能的程序,使用字節(jié)流經(jīng)日記的具體信息記錄在本地的txt文件中。當用戶輸入日記的特定內(nèi)容后,會將輸入的內(nèi)容保存至本地的txt文件中。需要輸入的內(nèi)容包括“姓名”,“天氣”、“標題”、“內(nèi)容”的數(shù)據(jù)。保存的時候需要判斷本地是否存在文件,如果存在則追加,不存在則新建。文件命名格式為“黑馬日記本”加上“.txt”后綴,如“黑馬日記本.txt”
? 2.運行結(jié)果
任務運行結(jié)果如圖7-1所示。
圖7-2 運行結(jié)果
運行結(jié)束后在本地生成一個“黑馬日記本.txt”文件,如圖7-2所示。
圖7-2 黑馬日記本.txt
?
【實現(xiàn)思路】
(1)為方便保存日記的相關信息,可以將日記信息封裝成一個實體類。
(2)用戶編寫日記時,首先創(chuàng)建一個集合用于存放日記,然后用戶依次填寫的內(nèi)容為“姓名”,“天氣”、“標題”和“內(nèi)容”,并將這些內(nèi)容存放在集合中,再將實體類保存到txt文件中。
(3)查詢?nèi)沼洉r,使用字節(jié)流的讀取實現(xiàn)控制臺打印日記信息。
(4)將日記信息寫入到txt文件之前,需先拼湊好txt文件名,再判斷本地是否已存在此文件,這里可通過輸入流嘗試獲取此文件的字節(jié)流,如果獲取成功,則證明這個文件已存在,那么就通過輸出流向文件末尾追加日記信息,如果獲取失敗,即異常,說明之前并沒有生成日記信息,則需要新建此文件。
【實現(xiàn)代碼】
日記小功能的實現(xiàn)代碼,如文件7-1所示。
(1)將日記信息封裝成一個實體類Diary,具體如文件7-1所示。
文件7-1 Diary.java
- package chapter0703;
- public class Diary {
- ????String time; ?? //時間
- ????String name; //姓名
- ????String weather;//天氣
- ????String title;//標題
- ????String content;//內(nèi)容
- ????public Diary(String time, String name, String weather, String title,
- ?????????????????String content) {
- ????????this.time = time;
- ????????this.name = name;
- ????????this.weather = weather;
- ????????this.title = title;
- ????????this.content=content;
- ????}
- }
在文件7-1中,第3-7行代碼定義了用于標識日記信息的各個字段,第8-14行代碼重新了toString()方法。
(2)定義DiaryOrder類來記錄和操作日記信息,具體如文件7-2所示。
文件7-2 DiaryOrder.java
- package chapter0703;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.Scanner;
- public class DiaryOrder {
- ????static ArrayList<Diary> diarysList=new ArrayList<Diary>();
- ????public static void main(String[] args) throws Exception {
- ????????System.out.println("--------歡迎來到黑馬日記本--------");
- ????????boolean falg = true;
- ????????Scanner scan=new Scanner(System.in);
- ????????while(falg) {
- ????????????System.out.println("1.編寫日記");
- ????????????System.out.println("2.查看日記");
- ????????????int a = scan.nextInt();
- ????????????if(a==1) {
- ????????????????//編寫日記
- ????????????????System.out.println("請輸入姓名:");
- ????????????????String name=scan.next();
- ????????????????System.out.println("請輸入天氣:");
- ????????????????String weather=scan.next();
- ????????????????System.out.println("請輸入標題:");
- ????????????????String title=scan.next();
- ????????????????System.out.println("請輸入內(nèi)容:");
- ????????????????String content=scan.next();
- ????????????????Diary diary = addDiary(name,weather,title,content);
- ????????????????FileUtil.saveBooks(diary);
- ????????????}else if(a==2) {
- ????????????????//查看日記
- ????????????????FileUtil.readFile();
- ????????????}else {
- ????????????????System.out.println("輸入錯誤");
- ????????????}
- ????????}
- ????}
- ????/*
- ?????* 初始化日記列表 將輸入的字符暫存為實體
- ?????*/
- ????private static Diary addDiary(String name,String weather,String
- ????????????title,String content) {
- ????????Date date = new Date();
- ????????DateFormat format = new SimpleDateFormat("yyyyMMdd");
- ????????String a=format.format(date).toString();
- ????????Diary diary=new Diary(a,name,weather,title,content);
- ????????return diary;
- ????}
- }
在文件7-2中,第8行代碼創(chuàng)建了ArrayList類型的全局變量作為存儲日記的倉庫。第13~35行代碼使用while循環(huán)輸入操作,第19~26行代碼讓用戶輸入日記,第27~28行代碼將用戶輸入的日記存入本地文件,第31行代碼調(diào)用readFile()方法顯示日記,第40~47行代碼初始化日記信息。
(3)定義工具類FileUtil保存日記信息,具體如文件7-3所示。
文件7-3 FileUtil.java
- package chapter0703;
- import java.io.BufferedOutputStream;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- /**
- ?* 工具類
- ?*/
- public class FileUtil {
- ????public static final String SEPARATE_FIELD = "\n";// 換行
- ????public static final String SEPARATE_LINE = "\t"; // 分隔
- ????/**
- ?????* 保存日記信息
- ?????*/
- ????public static void saveBooks(Diary diary) {
- ????// 判斷本地是否存在此文件
- ????String name = "黑馬日記本.txt";
- ????File file = new File("name");
- ????if (!file.exists()) {
- ????????????createFile(name, false, diary);
- ?????} else {
- ????????????createFile(name, true, diary);
- ?????}
- ??}
- ????/**
- ?????* 將日記信息保存到本地,可通過label標識來判斷是修改文件還是新建文件
- ?????* @param name? 文件名
- ?????* @param label 文件已存在的標識 true:已存在則修改; false:不存在則新建
- ?????* @param diary 日記信息
- ?????*/
- ????public static void createFile(String name, boolean label, Diary diary) {
- ????????BufferedOutputStream out = null;
- ????????StringBuffer sbf = new StringBuffer();// 拼接內(nèi)容
- ????????try {
- ????????????if (label) {// 當已存在當天的文件,則在文件內(nèi)容后追加
- ????????????????// 創(chuàng)建輸出流,用于追加文件
- ?????????????out = new BufferedOutputStream(new FileOutputStream(name, true));
- ????????????} else {// 不存在當天文件,則新建文件
- ????????????????// 創(chuàng)建輸出流,用于保存文件
- ????????????????out = new BufferedOutputStream(new FileOutputStream(name));
- ????????????????String fieldSort =? "歡迎來到黑馬日記本" ;// 創(chuàng)建表頭
- ????????????????// 新建時,將表頭存入本地文件
- ????????????????sbf.append(fieldSort).append(SEPARATE_FIELD);
- ????????????}
- ??????????sbf.append("時間:").append(diary.time);// 追加換行符號
- ??????????sbf.append("姓名:").append(diary.name).append(SEPARATE_LINE);
- ??????????sbf.append("標題:").append(diary.title).append(SEPARATE_LINE);
- ??????????sbf.append("天氣:").append(diary.weather).append(SEPARATE_FIELD);
- ??????????sbf.append("內(nèi)容:").append(diary.content).append(SEPARATE_FIELD);
- ????????????String str = sbf.toString();
- ????????????byte[] b = str.getBytes();
- ????????????for (int i = 0; i < b.length; i++) {
- ????????????????out.write(b[i]);// 將內(nèi)容寫入本地文件
- ????????????}
- ????????} catch (Exception e) {
- ????????????e.printStackTrace();
- ????????} finally {
- ????????????try {
- ????????????????if (out != null)
- ????????????????????out.close();// 關閉輸出流
- ????????????} catch (Exception e2) {
- ????????????????e2.printStackTrace();
- ????????????}
- ????????}
- ????}
- ????/*
- ?????* 讀取日記并顯示
- ?????*/
- ????public static void readFile() throws Exception{
- ????????//創(chuàng)建文件字節(jié)輸出流
- ????????FileInputStream in = new FileInputStream("黑馬日記本.txt");
- ????????byte[] b = new byte[in.available()];
- ????????in.read(b);
- ????????String str=new String(b);
- ????????System.out.println(str);
- ????????in.close();
- ????}
- }
在文件7-3中,當saveBooks()方法被調(diào)用時,獲取當前日期并格式化后,拼出了文件名,再通過第24~29行代碼判斷文件是否存在,如果存在,則修改文件,如果不存在,則創(chuàng)建一個新文件。文章來源:http://www.zghlxwxcb.cn/news/detail-445557.html
第36~70行代碼定義了createFile()方法,createFile()方法中的label參數(shù)如果為true則追加內(nèi)容,如果label值是false則新建文件。第50~55行代碼行代碼拼出一行數(shù)據(jù),且在每次拼接之前都要加上換行符“\r\n”,每個字段之間通過“,”分隔字段;第56~59行代碼將內(nèi)容寫入文件。第63~69行代碼關閉了輸出流。文章來源地址http://www.zghlxwxcb.cn/news/detail-445557.html
到了這里,關于日記本-課后程序(JAVA基礎案例教程-黑馬程序員編著-第七章-課后作業(yè))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!