天天看點

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

JDK(java官方)内置對象-進階-File

1.為什麼要學習File

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

講解IO流之前為什麼先講解異常和File類呢?

因為File表示的是IO流将來要操作的檔案,是以我們需要學習File類。

而操作檔案無非就是上傳檔案和下載下傳檔案,在這個操作的過程中可能出現問題,出現問題後,我們需要對對應的代碼進行處理。是以我們需要學習異常。

2.File簡介

2.1.File的概念

檔案和目錄路徑名的抽象表示形式

2.2.File常見成員

2.2.1.構造方法

publicFile(String pathname)

publicFile(String parent,String child)

publicFile(File parent,String child)

通過建立對象後,我們再來了解檔案和目錄路徑名的抽象表示形式這句話的意思:

僅僅是一個路徑的表示,不代碼具體的事物一定是存在的。

代碼實戰:

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

2.2.2.常見方法

2.2.2.1.建立功能

public boolean createNewFile() 建立檔案如果存在這樣的檔案,就不建立了

public boolean mkdir() 建立檔案夾如果存在這樣的檔案夾,就不建立了

public boolean mkdirs() 建立檔案夾,如果父檔案夾不存在,會幫你建立出來,如果存在就不建立了

2.2.2.1.1. mkdir()

代碼實戰:

publicclass Demo1 {

【思考】:既然傳回值是boolean,那麼本地磁盤上已經存在了這個檔案夾,到底傳回true還是false呢?

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題
2.2.2.1.2. createNewFile()

代碼實戰:

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

【思考】:為何會報錯呢?

觀察源碼

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

【思考】:這個方法如果再執行一次,效果會怎麼樣呢?

傳回false

【思考題】:請在d盤的test目錄下建立一個b.txt檔案

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

【思考題】:我想要在d盤的aaa檔案夾下建立一個bbb檔案夾,怎麼做呢?

代碼實戰:

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

【接着思考】:為何不會抛出異常呢?

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

【正确做法】:

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

【接着思考】:如果有很多層級結構的檔案夾,這樣子操作顯然是非常不合适的

這時候,我們就迫切需要一個方法幫我們去處理這種情況,可以使用:Mkdirs()

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

【開發總結】:

  • 你到底要建立檔案還是檔案夾,你最清楚,方法不要調錯了。
  • 如果想要建立一個子檔案/檔案夾,前提必須要保證該檔案對應的檔案目錄首先要存在

【注意點】:如果你在建立檔案的時候,你沒有寫任何目錄路徑,那麼會怎麼樣呢?

代碼實戰:

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

建立出來的檔案存在于: E:\yueqian講課\01-java基礎\0830\備課代碼\02-File\女神.jpg

你目前項目所在的目錄下[U1] !!!!

2.2.2.2.删除功能

public boolean delete()

2.2.2.2.1.删除單個檔案

如果删除的是本地硬碟中檔案,那麼會直接删除并且不走資源回收筒!

File file = new File("d:\\a.txt"); System.out.println(file.delete());

如果删除的是本地項目中檔案,删除完後,需要手動重新整理一下

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

2.2.2.2.2.删除檔案夾

删除bbb檔案夾

// 删除bbb檔案夾 File file11 = new File("e:\\aaa\\bbb"); booleanb = file11.delete(); System.out.println(b);

注意:在java中删除操作,不走資源回收筒,是以請一定要注意!!!

删除aaa檔案夾

File file= new File("d:\\aa\\bb"); file.delete();[n2] File fle = new File("d:\\aa");[n3] fle.delete();

因為aaa中有檔案夾bbb,如果想要删除aaa檔案夾,必須先删除bbb檔案夾

下面代碼為何會出錯呢?因為這樣子寫,是代表在項目的根目錄下删除[n4]

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

2.2.2.3.重命名功能

public boolean renameTo(File file)[n5]

代碼實戰:

磁盤上

File file = new File("D:\\校服美女.jpg"); File file2 = new File("D:\\女神.jpg"); System.out.println(file.renameTo(file2));

目前項目下

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

【思考】:如果在進行重命名操作的時候,路徑不一緻會怎麼樣呢?

代碼實戰:

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

其實是做了一個剪切操作[n6]

【開發小結】:

如果路徑一緻,那麼僅僅就是改個名字。

如果路徑不一緻,那麼不僅僅是改個名字,還會剪切。

2.2.2.4.判斷功能

public booleanisDirectory() 判斷是否是目錄

public boolean isFile() 判斷是否是檔案

public booleanexists() 判斷是否存在

public boolean canRead() 判斷是否可讀

public boolean canWrite() 判斷是否可寫

public boolean isHidden() 判斷是否隐藏

檔案的狀态介紹

  1. 隐藏
  2. 可讀
  3. 可寫
  4. 可讀可寫

Windows 系統設定檔案的狀态

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

代碼實戰:

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

思考:File檔案對象具體有哪些使用場景呢?

.2.2.5.擷取功能

2.2.2.5.1.基本擷取功能

• public String getAbsolutePath() 擷取絕對路徑[n7]

• public String getPath() 擷取相對路徑[n8]

思考:以後開發中,會使用哪種路徑方式?

• public String getName() 擷取名稱

• public long length() 擷取長度(位元組長度)

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

容量的機關從小到大依次是:位元組(B)、KB、MB、GB、TB。它們之間的關系是。

1TB=1024GB

1GB=1024MB

1MB=1024KB

1KB=1024位元組

代碼實戰:

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

• public long lastModified() (擷取最後一次修改時間)

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題
System.out.println("最後修改時間:"+file.lastModified());

觀察列印:

最後修改時間:1550292558058

思考:為何是這樣子呢?[n9]

将毫秒數進行轉換

Date date =new Date(file.lastModified()); SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sd.format(date); System.out.println("dateStr:"+dateStr);

觀察列印結果:

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題
2.2.2.5.2.進階擷取功能

public String[] list() 擷取指定目錄下的所有檔案或者檔案夾的名稱數組

擷取目前項目下的所有

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

思考:如何擷取目前盤符下的所有呢?

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

public File[] listFiles() 擷取指定目錄下的所有檔案或者檔案夾的File數組

觀察列印效果:

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

思考:如何我想像上面一樣,僅僅是擷取到檔案名稱呢?[n10]

05-File對象JDK(java官方)内置對象-進階-File1.為什麼要學習File2.File簡介3.File作業練習題

思考:以後開發中,我們到底應該使用哪一種方式比較好呢?[n11]

3.File作業練習題

【練習題】:

判斷E盤目錄下是否有字尾名為.jpg的檔案,如果有,就輸出此檔案名稱,如果沒有,給出提示!!

批量修改多個檔案名稱

[U1]在項目上右鍵重新整理即可

或者去項目的目錄下找

[n2]先删除bb

[n3]先删除aa

[n4]因為不加任何路徑,預設就是删除目前項目目錄下的東西

[n5]思考為何重命名方法的參數是File 類型?

[n6]重新整理一下

[n7]擷取的是完整路徑名,從盤符開始

[n8]相對來擷取的,參照物是盤符

[n9]是以毫秒數進行計算的

[n10]思路1:截取字元串

思路2:使用File.getName()方法

[n11]第二種方式比較好,因為傳回的是File對象,有對象,就可以使用對象操作一些方法擷取更多的資訊