就業(yè)班課件java基礎(chǔ)-第22天教學(xué)_第1頁
就業(yè)班課件java基礎(chǔ)-第22天教學(xué)_第2頁
就業(yè)班課件java基礎(chǔ)-第22天教學(xué)_第3頁
就業(yè)班課件java基礎(chǔ)-第22天教學(xué)_第4頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第二十二天 時(shí)間日期類&File 類【教學(xué)內(nèi)容】1、API 中其他類介紹2、IO 概述3、File 類介紹【代碼此】需在每天下午放學(xué)后填寫【教學(xué)總結(jié)】:【第一階段】【目標(biāo):API 中其他類介紹】1、Date 類介紹在開發(fā)中經(jīng)常會用到時(shí)間和日期,前面學(xué)習(xí) System 類時(shí),其中 currentTimeMillis 方法可以返回當(dāng)前時(shí)間的毫秒值這些數(shù)據(jù)看起來很不清晰,怎么能讓這些數(shù)據(jù)變的很清晰,便于閱讀呢?在查閱 System 類的 currentTimeMillis 方法時(shí),其中讓另請參見 Date 類,找到這個(gè) Date發(fā)現(xiàn),類 Date 表示特定的瞬間,精確到毫秒。繼續(xù)查閱 Date 類的

2、描述,發(fā)現(xiàn) Date 擁有多個(gè)構(gòu)造函數(shù),只是部分已經(jīng)過時(shí),但是其中有未過時(shí)的構(gòu)造函數(shù)可以把毫秒值轉(zhuǎn)成日期對象。將毫秒值轉(zhuǎn)成日期后,輸出的格式不利于閱讀,繼續(xù)查閱 Aate 中有 getYear、getMouth 等方法,可以他們已經(jīng)過時(shí),繼續(xù)往下查閱,看到了 toString 方法,點(diǎn)開查閱原來是上面打印的 date 就是默認(rèn)調(diào)用了這個(gè) toString 方法,并且在這個(gè)方法下面還有讓參見 toLocaleString方法,點(diǎn)進(jìn)去,這個(gè)方法又過時(shí)了,從 JDK 1.1 開始,由 DateFormat.format(Date date) 取代。既然這個(gè)方法被 DateFormat.format(

3、Date date) 取代,那么就要去查閱 DateFormat 類。2、DateFormat 類介紹查閱 DateFormat 類介紹:DateFormat 是日期/時(shí)間格式化子類的抽象類,它以與語言無關(guān)的方式格式化并就是日期 -日期或時(shí)間。日期/時(shí)間格式化子類(如 SimpleDateFormat)允許進(jìn)行格式化(也(文本- 日期)和標(biāo)準(zhǔn)化。完成日期和文本之間的轉(zhuǎn)換。繼續(xù)閱讀 A文本)、原來這個(gè)類可以幫ateFormat 可幫助進(jìn)行格式化并任何語言環(huán)境的日期。對于月、,甚至日歷格式(陰歷和陽歷),其代碼可完全與語言環(huán)境的約定無關(guān)。要格式化一個(gè)當(dāng)前語言環(huán)境下的日期,可使用某個(gè)靜態(tài)工廠方法:

4、myString= DateFormat.getDateInstance().format(myDate);/獲取日期格式器對象,在獲取格式器對象時(shí)可以指定風(fēng)格,風(fēng)格包括 FULL、LONG、MEDIUM 和 SHORT DateFormat format = DateFormat.getDateInstance(DateFormONG);/對日期進(jìn)行格式化/獲取當(dāng)前時(shí)間的毫秒值long time = System.currentTimeMillis();/創(chuàng)建日期對象,把當(dāng)前的毫秒值轉(zhuǎn)成日期對象 Date date = new Date(time);System.out.prln(date)

5、;/Wed Dec 11 16:42:06 CST 20133、Calendar 類介紹可以通過 Date 獲取到日期對象,使用DateFormat 方法可以把日期進(jìn)行格式化,可獲取當(dāng)前日期對應(yīng)的具體的年,具體的月,具體的日,等信息,怎么獲取呢?想找到 Date 繼續(xù)查閱,其中有 getYear 等方法,只是這些方法過時(shí)了,并且這些方法的描述中告訴參加 Calendar 類。查閱 Calendar 類的 API 描述,發(fā)現(xiàn)原來 Calendar 類是專門用于描述日歷的類,它中個(gè) map 集合,在這個(gè)集合中存放著所有和日期相關(guān)的信息。了一4、日期練習(xí)練、將毫秒值轉(zhuǎn)成 指定的日期的格式x 年xx

6、月xx 日hh:mm:ss/1,毫秒值time-DateDate date = new Date(time);/2,通過日期時(shí)間格式器對象DateFormat對日期對象進(jìn)行格式化(日期-文本字符串)public class DateDemo public sic void main(String args) /獲取日歷對象Calendar c = Calendar.getInstance();System.out.prln(c);/打印出了一個(gè)map集合,其中描述日期的所有信息/獲取年year = c.get(Calendar.YEAR);/獲取月,月是從0開始計(jì)算的mouth = c.get

7、(Calendar.MONTH)+1;/獲取日day = c.get(Calendar.DAY_OF_MONTH);/獲取,由于老外們把日當(dāng)作一周的第一天,所有日 返回對應(yīng)的數(shù)字為1 Stringk = getk(c.get(Calendar.DAY_OF_ K); System.out.prln(year+年+mouth+月+day+日+k);public sic String getk(i) if(i7)throw new RuntimeException(i+沒有對應(yīng)的);Stringks = ,日,一,二,三,四,星期五,六;returnksi;String str_time = fo

8、rmat.format(date);System.out.prln(str_time);/練習(xí) 2 :2012-3-17轉(zhuǎn)成日期對象。之前有做過,將一個(gè)日期對象轉(zhuǎn)成日期文本字符串這個(gè)稱之為格式化。現(xiàn)在要做的是文本-日期對象:的格式器。這些都是 DateFormat 中的功能。不同日期風(fēng)格的文本對應(yīng)不同練習(xí) 3,2013-4-25到2013 年 7 月 29 日到底有多少天?思路:1,到底有多少天?相減的過程。2,字符串也不能相減啊,毫秒值可以相減。3,怎么獲取毫秒值呢?毫秒值-日期對象, 日期對象-毫秒值。4,怎么獲取日期對象呢?需要將字符串文本-日期對象。public class DateT

9、est2 public sic void main(String args) throws ParseException String str_date1 = 2013-4-25; String str_date2 = ;/需要定義兩個(gè)模式。一個(gè)str_date1,一個(gè)str_date2。style_1 = DateFormat.MEDIUM;/默認(rèn)風(fēng)格。 style_2 = DateFormONG;/默認(rèn)風(fēng)格。days = getDays(str_date1,str_date2, style_1,style_2); System.out.prln(days=+days);public sic

10、 void main(String args) throws ParseException String str_date = ;/日期格式器。DateFormatDateFormat dateFormat = DateFormat.getDateInstance(DateFormONG); Date date = dateFormat.parse(str_date);System.out.prln(date);/這種格式在給定的四種風(fēng)格中不存在。怎么呢?只能使用子類SimpleDateFormat的方法,/1,構(gòu)造函數(shù)明確特定風(fēng)格,2,applyPattern 方法來修改格式模式str_da

11、te = 2013/3/17 17-13-45;DateFormat dateFormat2 = new SimpleDateFormat(yyyy/MM/dd hh-mm-ss); Date date2 = dateFormat2.parse(str_date);System.out.prln(date2);DateFormatformat= DateFormat.getDateTimeInstance(DateFormONG,DateFormONG); String str_time = format.format(date);System.out.prln(str_time);4,獲取給

12、定年份的 2 月有多少天?【面試題】public class DateTest3 public sic void main(String args) for (year = 2000; year = 2020; year+) show(year);public sic void show(year) Calendar c = Calendar.getInstance();/ 有獲取有設(shè)置 setc.set(year, 2, 1);/ 時(shí)間是連續(xù)的,3月1日的前一天就2月的最后一天,知道2月份的天數(shù)。c.add(Calendar.DAY_OF_MONTH, -1); year1 = c.get(

13、Calendar.YEAR); month = c.get(Calendar.MONTH) + 1;day = c.get(Calendar.DAY_OF_MONTH);Stringk =k(c.get(Calendar.DAY_OF_K);/ 打印信息中年月日等相關(guān)信息都在這里。獲取指定字段的值就哦了。System.out.prln(year1 + 年 + month + 月 + day + 日 +k);public sic Stringk(i) if (i 7) throw new RuntimeException(i + 沒有對應(yīng)的);private sicgetDays(String

14、str_date1, String str_date2, style_1,style_2) throws ParseException /1,根據(jù)給定風(fēng)格創(chuàng)建格式器對象。DateFormat format_1 = DateFormat.getDateInstantyle_1); DateFormat format_2 = DateFormat.getDateInstantyle_2);/2,對文本進(jìn)行。Date date_1 = format_1.parse(str_date1); Date date_2 = format_2.parse(str_date2);/3,獲取日期對象毫秒值。lon

15、g time_1 = date_1.getTime();long time_2 = date_2.getTime();/4,相減。long time = Mabs(time_1 - time_2); day = ()(time/1000/60/60/24);return day;【學(xué)習(xí)效果】1、掌握 Date 類、DateFormat 類、Calendar 類的應(yīng)用2、重點(diǎn)做完日期的練習(xí)。【第二階段】【目標(biāo):IO 概述】經(jīng)過這段時(shí)間的學(xué)習(xí),已經(jīng)掌握了 Java 中常用的一些API 的使用,可以幫助完成相應(yīng)的操作。不管使用 String 類,還是使用集合框架類,或者使用時(shí)間日期,數(shù)學(xué)操作類等,這

16、些類操作的數(shù)據(jù)都是在內(nèi)存中,一旦程序運(yùn)行結(jié)束,這些數(shù)據(jù)都沒有了,等下次再想使用這些數(shù)據(jù),已經(jīng)沒有了。那怎么辦呢?能不能把運(yùn)算完的數(shù)據(jù)都保存下來,下次程序啟動的時(shí)候,再把這些數(shù)據(jù)讀出來繼續(xù)使用呢?其實(shí)就是把這些數(shù)據(jù)持久化起來。要把數(shù)據(jù)持久化就需要把內(nèi)存中的數(shù)據(jù)到內(nèi)存以外的其他持久化設(shè)備(硬盤、光盤、U 盤等)上。當(dāng)需要把內(nèi)存中的數(shù)據(jù)當(dāng)把持久設(shè)備上的數(shù)據(jù)到持久化設(shè)備上這個(gè)動作稱為輸出(寫)Output 操作。到內(nèi)存中的這個(gè)動作稱為輸入(讀)Input 操作。因此把這種輸入和輸出動作稱為 IO 操作。想把 Java 程序操作完的數(shù)據(jù)保存硬盤等持久化設(shè)備上,這時(shí)需要把這些數(shù)據(jù)通過 JVM,調(diào)用操作系統(tǒng)

17、底層的讀寫技術(shù)才能把數(shù)據(jù)保存 在持久設(shè)備上,同樣的如果要從持久設(shè)備上數(shù)令據(jù),也要借助操作系統(tǒng)底層。而 Java 是面象的語言,它把這些操作和系統(tǒng)底層的相關(guān)已經(jīng)給封裝成相應(yīng)的對象,需要讀寫操作時(shí),找到對應(yīng)的對象即可完成?!緦W(xué)習(xí)效果】掌握輸入和輸出的方向問題?!局R點(diǎn)過度】簡單了解 IO 是怎么一回事之后,接下來就要進(jìn)一步做系統(tǒng)了解?!镜谌A段】【目標(biāo):File 類介紹】在操作系統(tǒng)中,數(shù)據(jù)都保存在文件中,而文件存放相應(yīng)的文件夾中。那么 Java 中是如何描述這些的呢?1、File 類的出現(xiàn)打開 API,搜索 File,發(fā)現(xiàn)竟然真的有這個(gè)類。閱讀其描述:File 文件和目錄路徑名的抽象表示形式。哦,

18、原來是這樣啊,Java 中把文件或者目錄(文件夾)都封裝成 File 對象。也就是說如果要去操作硬盤上的文件,或者文件夾只要找到 File 這個(gè)類即可。那么類中都有那些功能可以操作文件或者文件夾呢?2、File 類的構(gòu)造函數(shù)和分隔符就要研究研究 File 這個(gè)繼續(xù)查閱 File 的構(gòu)造函數(shù),發(fā)現(xiàn)原來 File 類有多個(gè)構(gòu)造函數(shù),可以構(gòu)造 File 對象。public class FileDemo / 定義表。Stringks = , 日, 一, 二, 三, 四, 五, 六 ;returnksi;3、File 類的獲取創(chuàng)建完了 File 對象之后,那么 File 類中都有那些方法,可以對 Fil

19、e 進(jìn)行操作,以及獲取文件相關(guān)信息呢?public class FileMethodDemo public sic void main(String args) /創(chuàng)建文件對象File file = new File(Test22.java);/獲取文件的絕對路徑,即全路徑String absPath = file.getAbsolutePath();/File中封裝的路徑是什么獲取到的就是什么。 String path = file.getPath();/獲取文件名稱String filename = file.getName();/獲取文件大小long size = file.length

20、();/獲取文件修改時(shí)間,獲取到的是毫秒值,可以使用日期格式化把毫秒值轉(zhuǎn)成字符串文本格式long time = file.lastModified();System.out.prln(absPath=+absPath); System.out.prln(path=+path); System.out.prln(filename=+filename); System.out.prln(size=+size);System.out.prln(time=+time);public sic void main(String args) /File構(gòu)造函數(shù)演示String pathName = e:ja

21、va_codeday22eo.java;File f1 = new File(pathName);/將Test22文件封裝成File對象。注意;有可以封裝不存在文件或者文件夾,變成對象。System.out.prln(f1);File f2 = new File(e:java_codeday22e,o.java); System.out.prln(f2);/將parent封裝成file對象。File dir = new File(e:java_codeday22e); File f3 = new File(dir,o.java); System.out.prln(f3);/File類中幾個(gè)靜態(tài)

22、的成員屬性,其中separator描述的與操作系統(tǒng)相關(guān)的路徑分隔符 File f5 = new File(e:+File.separator+java_code+File.separator+day22e+File.separator+o.java);4、文件和文件夾的創(chuàng)建刪除等經(jīng)常上面介紹,知道可以通過 File 獲取到文件名稱,路徑(目錄),修改時(shí)間等信息,能不能使用 File 類創(chuàng)建、刪除文件等操作呢?public class FileMethodDemo2 public sic void main(String args) throws IOException / 對文件或者文件加進(jìn)行

23、操作。File file = new File(e:file.txt);/ 創(chuàng)建文件,如果文件不存在,創(chuàng)建 true 如果文件存在,則不創(chuàng)建 false。 如果路徑錯(cuò)誤,IOException。b1 = file.createNewFile(); System.out.prln(b1= + b1);/-刪除文件操作-注意:不去回收站。慎用-b2 = file.delete(); System.out.prln(b2=+b2);/需要判斷文件是否存在b3 = file.exists(); System.out.prln(b3=+b3);/-對目錄操作 創(chuàng)建,刪除,判斷-File dir = ne

24、w File(e:abc);/mkdir()創(chuàng)建單個(gè)目錄。/dir.mkdirs();創(chuàng)建多級目錄 b4 = dir.mkdir();System.out.prln(b4=+b4);/刪除目錄時(shí),如果目錄中有內(nèi)容,無法直接刪除。 b5 = dir.delete();/只有將目錄中的內(nèi)容都刪除后,保證該目錄為空。這時(shí)這個(gè)目錄才可以刪除。 System.out.prln(b5= + b5);/判斷文件,目錄File f = new File(e:javahaha);/ 要判斷是否是文件還是目錄,必須先判斷存在。/ f.mkdir();/f.createNewFile(); System.out.p

25、rln(f.isFile(); System.out.prln(f.isDirectory();/毫秒值-Date-格式化-字符串文本String str_date = DateFormat.getDateTimeInstance(DateFormONG, DateFormONG).format(new Date(time);System.out.prln(str_date);5、listFiles()方法介紹文件都存放在目錄(文件夾)中,那么如何獲取一個(gè)目錄中的所有文件或者目錄中的文件夾呢?那么先想想,一個(gè)目錄中可能有多個(gè)文件或者文件夾,那么如果 File 中有功能獲取到一個(gè)目錄中的所有文件

26、和文件夾,那么功能得到的結(jié)果要么是數(shù)組,要么是集合。開始查閱 API。注意:在獲取指定目錄下的文件或者文件夾時(shí)必須滿足下面兩個(gè)條件1,指定的目錄必須是存在的,2,指定的必須是目錄。否則容易返回?cái)?shù)組為 null,出現(xiàn) NullPoerException6、文件過濾器通過上述方法,可以獲取到一個(gè)目錄下的所有文件和文件夾,但能不能對其進(jìn)行過濾呢?比如只想要一個(gè)目錄下的指定擴(kuò)展名的文件,或者包含某些關(guān)鍵字的文件夾呢?是可以先把一個(gè)目錄下的所有文件和文件夾獲取到,并遍歷當(dāng)前獲取到所有內(nèi)容,遍歷過在進(jìn)行篩選,但是這個(gè)動作有點(diǎn)麻煩,Java 給提供相應(yīng)的功能來解決這個(gè)問題。查閱 File 類的API,在查閱

27、時(shí)發(fā)現(xiàn) File 類中重載的 listFiles 方法,并且接受指定的過濾器。public class FileDemo2 public sic void main(String args) /獲取擴(kuò)展名為.java所有文件/創(chuàng)建File對象File file = new File(E:JavaSE1115codeday11_code);/獲取指定擴(kuò)展名的文件,由于要對所有文件進(jìn)行擴(kuò)展名篩選,因此調(diào)用方法需要傳遞過濾器File files = file.listFiles(new FileFilterBySuffix();/遍歷獲取到的所有符合條件的文件for (File f : files)

28、 System.out.prln(f);public class FileMethodDemo3 public sic void main(String args) File dir = new File(e:java_code);/獲取的是目錄下的當(dāng)前的文件以及文件夾的名稱。String names = dir.list();for(String name : names) System.out.prln(name);/獲取目錄下當(dāng)前文件以及文件對象,只要拿到了文件對象,那么就可以獲取其中想要的信息 File files = dir.listFiles();for(File file : f

29、iles) System.out.prln(file);上述程序有個(gè)問題,行改變呢?即就是在創(chuàng)建的過濾器進(jìn)行改造。在自己定義的過濾器中把需要過濾的名稱寫死了,能不能給據(jù)需求進(jìn)自己定義的過濾器對象時(shí),在明確具體的需要過濾的名稱,那就要對listFiles源碼/FilenameFilter filter = new FileFilterBySuffix ()public File listFiles(FilenameFilter filter) String ss = list();/調(diào)用了File類中的list()獲取到所有的名稱數(shù)組 ss。if (ss = null) return null;

30、/健壯性判斷,如果數(shù)組為null,就返回。 ArrayList files = new ArrayList();/創(chuàng)建一個(gè)集合。元素是File類型。 for (String s : ss)/遍歷名稱數(shù)組。if (filter = null) | filter.accept(this, s)/對遍歷的名稱進(jìn)行過濾器的判斷。將 當(dāng)前目錄this,遍歷到名稱s傳遞給accept方法。/一旦條件滿足過濾器的過濾條件。files.add(new File(s, this);/將滿足過濾條件添加到集合中。添加是 將public class FileDemo2 public sic void main(St

31、ring args) /獲取擴(kuò)展名為.java所有文件/創(chuàng)建File對象File file = new File(E:JavaSE1115codeday11_code);/獲取指定擴(kuò)展名的文件,由于要對所有文件進(jìn)行擴(kuò)展名篩選,因此調(diào)用方法需要傳遞過濾器File files = file.listFiles(new FileFilterBySuffix(.java);/遍歷獲取到的所有符合條件的文件for (File f : files) System.out.prln(+f);/定義類實(shí)現(xiàn)文件名稱FilenameFilter過濾器class FileFilterBySuffix implements FilenameFilterprivate String suffix ;/在創(chuàng)建過濾器對象時(shí),明確具體需要過濾的文件名稱public FileFilterBySuffix(String suffix)thiffix = suffix;publicaccept(File dir, String name) return name.endsWith(suffix);/定義類實(shí)現(xiàn)文件名稱FilenameFilter過濾器class FileFilterBySuffix implements Filenam

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論