🌸個人主頁:https://blog.csdn.net/2301_80050796?spm=1000.2115.3001.5343
🏵?熱門專欄:🍕 Collection與數據結構 (91平均質量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm=1001.2014.3001.5482
🧀Java EE(94平均質量分) https://blog.csdn.net/2301_80050796/category_12643370.html?spm=1001.2014.3001.5482
🍭MySql數據庫(93平均質量分)https://blog.csdn.net/2301_80050796/category_12629890.html?spm=1001.2014.3001.5482
感謝點贊與關注~~~
目錄
- 1. 認識文件
- 1.1 文件的兩種定義方法
- 1.2 什么是IO
- 1.3 文件在計算機中的儲存形式
- 1.4 文件路徑(path)
- 1.5 文件的分類
- 2. Java中的文件操作
- 2.1 File的屬性,構造方法,成員方法.
- 2.1.1 屬性
- 2.1.2 構造方法
- 2.1.3 成員方法
1. 認識文件
1.1 文件的兩種定義方法
文件的定義方法分為狹義上的文件和廣義上的文件,狹義上的文件就是:針對硬盤這種持久化存儲的I/O設備,當我們想要進?數據保存時,往往不是保存成?個整體,?是獨?成?個個的單位進?保存,這個獨?的單位就被抽象成?件的概念,就類似辦公桌上的?份份真實的?件?般.通俗地來說,就是平時我們保存在硬盤上上的文件,就是狹義上的文件.
廣義上的文件就是:操作系統把很多的資源,包括硬件資源和軟件資源,全部都抽象成了文件.
[問題] 文件夾是不是文件呢?
是的,文件類型不僅僅包括圖片文件,影像文件等.我們平時用戶叫的文件夾,專業一點講叫做目錄文件,簡稱目錄.
1.2 什么是IO
IO是input和output的縮寫,叫做輸入和輸出,這里的輸入和輸出的方向統一以CPU為參照來看.
向著CPU方向來的,叫做輸入,反著CPU方向來的,叫做輸出.
1.3 文件在計算機中的儲存形式
隨著文件越來越多,我們必須對文件進行有序地組織,組織方式是按照層級的結構進行組織,也就是我們數據結構中學習到的樹形結構,即文件和文件之間有著明顯的嵌套關系文件在計算機中統一以樹形結構來存儲,它是一顆N叉樹結構.
1.4 文件路徑(path)
如何在文件系統中定位我們唯一一個文件呢?樹中的每一個結點都可以被一條從根開始,一直到達結點的路徑所描述,這種描述方式稱為絕對路徑.在windows操作系統中,根節點以盤符開頭,目錄和目錄之間用"/“或者”"隔開.
例如:
D:\personal\Java\MySQL\mysql-connector-java-5.1.47.jar
除了可以從根節點開始之外,還可以從任意結點出發,進行路徑描述,而這種描述方式,叫做相對路徑,當前目錄用".“表示,上一級目錄用”…"表示.
例如:
當前所在目錄為MySQL
./mysql-connector-java-5.1.47.jar
../MySQL/mysql-connector-java-5.1.47.jar
舉例:大一新生去上課
大一新生剛來到大學,不知道大學中的教學樓都在哪里,于是在上第一節課的時候就會問路上的學長學姐:"學長,行思樓的A202教室在哪里?"于是學長便告訴了他:"直走之后右轉到行思樓,進入教學樓之后,左轉進入A座,上二樓一直直走就可以找到(絕對路徑)."但是在進入行思樓之后,這位新生又忘記了教室怎么走,于是問樓道里的一個學姐:"學姐,A202教室在哪里."于是學姐并告訴了他:“左轉進入A座,上二樓一直直走就可以找到(相對路徑).”
[拓展]
有些目錄中的文件可以通過在windowsShellPower或者Win+R中輸入絕對路徑直接運行,存在與環境變量Path中的文件可以直接通過文件名來運行.
1.5 文件的分類
即使是普通?件,根據其保存數據的不同,也經常被分為不同的類型,我們?般簡單的劃分為?本?件和?進制?件,分別指代保存被字符集編碼的?本和按照標準格式保存的?被字符集編碼過的?件.文本文件中的內容都是合法的字符,即文本文件中的二進制數據通過編碼可以構成合法的字符,但是二進制文件中存啥都可以,在經過系統編碼之后,編碼出的字符不一定合法.
我們平時常見的:docx,pptx,mp3,mp4,png,jpg等文件都是二進制文件.像txt,md,html,java,c文件都是文本文件.
那么我們如何區分這個文件是二進制文件還是文本文件呢?最簡單粗暴的方法,就是使用記事本對這個文件進行打開操作,如果打開之后是一堆亂碼,就是二進制文件,如果打開時可以看懂的字,就是文本文件.
二進制文件:
文本文件:
2. Java中的文件操作
對Java的文件操作,分為對文件系統的操作(創建文件,刪除文件,重命名文件等),和對文件內容操作(讀文件,寫文件).
Java中通過java.io
中的File類來描述一個文件(包括目錄).但是需要注意的一點就是有File對象,并不意味著File對象真實存在.如我們在創建一個新文件的時候,文件就不存在.
2.1 File的屬性,構造方法,成員方法.
2.1.1 屬性
修飾符及類型 | 屬性 | 說明 |
---|---|---|
static String | pathSeparator | 依賴于系統的路徑分隔符,String類型的表示 |
staticchar | pathSeparator | 依賴于系統的路徑分隔符,char類型的表示 |
在windows操作系統中,分割符可以是正斜杠和反斜杠兩種.
2.1.2 構造方法
簽名 | 說明 |
---|---|
File(File parent,String child) | 根據父目錄 + 孩子文件路徑,創建?個新的File實例 |
File(String pathname) | 根據文件路徑創建?個新的File實例,路徑可以是絕對路徑或者相對路徑 |
File(String parent,String child) | 根據父目錄+孩子文件路徑,創建?個新的File實例,父目錄用路徑表示 |
注意:第二個字符串類型的路徑中可以是絕對路徑的字符串,也可以是相對路徑的字符串.但是要注意的一點就是,如果是相對路徑的時候,默認的開始目錄是當前項目所在的目錄.
2.1.3 成員方法
下面這些方法,都是通過調用系統的API來完成對文件的操作的.
修飾符及返回值類型 | ?法簽名 | 說明 |
---|---|---|
String | getParent() | 返回File對象的??錄?件路徑 |
String | getName() | 返回FIle對象的純?件名稱 |
String | getPath() | 返回File對象的?件路徑 |
String | getAbsolutePath() | 返回File對象的絕對路徑 |
String | getCanonicalPath() | 返回File對象的修飾過的絕對路徑 |
boolean | exists() | 判斷File對象描述的?件是否真實存在 |
boolean | isDirectory() | 判斷File對象代表的?件是否是?個?錄 |
boolean | isFile() | 判斷File對象代表的?件是否是?個普通?件 |
boolean | createNewFile() | 根據File對象,?動創建?個空?件。成功創建后返回true |
boolean | delete() | 根據File對象,刪除該?件。成功刪除后返回true |
void | deleteOnExit() | 根據File對象,標注?件將被刪除,刪除動作會到JVM運?結束時才會進? |
String[] | list() | 返回File對象代表的?錄下的所有?件名 |
File[] | listFiles() | 返回File對象代表的?錄下的所有?件,以File對象表? |
boolean | mkdir() | 創建File對象代表的?錄 |
boolean | mkdirs() | 創建File對象代表的?錄,如果必要,會創建中間?錄 |
boolean | renameTo(File dest) | 進??件改名,也可以視為我們平時的剪切、粘貼操作 |
boolean | canRead() | 判斷用戶是否對?件有可讀權限 |
boolean | canWrite() | 判斷用戶是否對?件有可寫權限 |
常用方法演示:
public static void main(String[] args) throws IOException {//絕對路徑File file = new File("D:/personal/Java/java_git/java-learning/Java EE初階/IoTest.txt");System.out.println(file.exists());//判斷文件是否存在System.out.println(file.getAbsolutePath());//輸出文件的絕對路徑System.out.println(file.getName());//獲取文件名System.out.println(file.getParent());//獲取文件的父目錄System.out.println(file.getCanonicalPath());//輸出修飾之后的路徑System.out.println(file.isDirectory());//判斷文件是否是目錄文件System.out.println(file.isFile());//判斷文件是否是非目錄文件System.out.println(file.renameTo(new File("D:/personal/Java/java_git/java-learning/Java EE初階/IoTest2.txt")));//因為重命名操作需要傳入的是文件類型的數據,不是字符串,我們需要通過new操作來進行對文件路徑的包裝System.out.println(file.delete());//刪除文件}
注意:這里雖然文件不存在,但是也會輸出路徑.
[注意]
- getAbsolutePath()方法中,如果構造方法中給出的是相對路徑,那么就只是把當前項目的路徑與構造方法中的路徑進行簡單的拼接,無論這個文件是否存在.其中getCanonicalPath()方法會去掉一些不必要的東西.
public static void main(String[] args) throws IOException {File file = new File("./test.txt");//所寫的文件名不一定要存在System.out.println(file.getAbsolutePath());//只是把當前項目所在的路徑與文件名進行了簡單的拼接System.out.println(file.getCanonicalPath());//去掉了一些沒有必要的東西}
運行結果:
- mkdir()和mkdirs()方法,前者用來創建單層目錄,后者可以通過用斜杠隔開創建雙層目錄.
public static void main(String[] args) {File file = new File("./aaa/bbb/test");System.out.println(file.mkdirs());//創建目錄,包含中間目錄File file1 = new File("ccc");System.out.println(file1.mkdir());//創建目錄}
運行之后:
- 創建文件createNewFile()有時會失敗,所以在含有該方法的方法中,我們要給出
throws IOException
異常. - deleteOnExit()方法,在執行到這個方法的時候并不會立即刪除文件,而是在該調用該方法的線程結束之后才會刪除該文件.
public static void main(String[] args) throws IOException {File file = new File("./test.txt");System.out.println(file.createNewFile());file.deleteOnExit();//在主線程結束之后才刪除文件System.out.println(file.exists());//在主線程結束之前,文件仍然存在}
運行結果:
此時我們可以看到,最后一個方法返回的是true.
這個方法也在我們的日常開發中有著廣泛的應用.比如系統中有一些"臨時文件"需要再進程結束之后再刪除掉.
- 在對文件進行重命名的時候,傳入方法中的對象是一個文件類型的對象,我們不可以直接傳入字符串,我們需要在方法中通過new File(String s)的辦法來創建一個新文件.
public static void main(String[] args) throws IOException {File file = new File("D:/personal/Java/java_git/java-learning/Java EE初階/IoTest.txt");System.out.println(file.createNewFile());System.out.println(file.renameTo(new File("D:/personal/Java/java_git/java-learning/Java EE初階/IoTest2.txt")));//因為重命名操作需要傳入的是文件類型的數據,不是字符串,我們需要通過new操作來進行對文件路徑的包裝}