網(wǎng)頁跟網(wǎng)站的區(qū)別百度seo2022
一.java.io.File類
作用:它的作用是用來表示某個(gè)文件或文件夾(文件夾又稱為目錄)
如何用File類的對(duì)象表示一個(gè)文件或目錄的呢?
API文檔中描述:文件和目錄路徑名的抽象表示形式
解釋:如果要表示一個(gè)文件或目錄,需要指定它的“路徑名”
例如:要表示W(wǎng)indows操作系統(tǒng)下的D盤Download文件夾下的大學(xué)資料.zip
那么可以這樣表示 File file = new File("d:\\Download\\大學(xué)資料.zip");
要表示W(wǎng)indows操作系統(tǒng)下的D盤Download文件夾
那么可以這樣表示 File file = new File("d:\\Download");
路徑分隔符:
? ? ? ? 早期Windows只支持? \
? ? ? ? 現(xiàn)在所有平臺(tái)都支持? /
二.File類的常用方法系列1
public String getName():返回由此File表示的文件或目錄的名稱
public long length():返回由此File表示的文件的長度。
? ? ? ? 返回由此抽象路徑名表示的文件的長度。如果此路徑名表示一個(gè)目錄,則返回值是不確定的。
public String getPath():將此File轉(zhuǎn)換為路徑名字符串。
public long lastModified():返回File對(duì)象對(duì)應(yīng)的文件或目錄的最后修改時(shí)間(毫秒值)
三.各種路徑問題
路徑名詞
(1)絕對(duì)路徑和相對(duì)路徑
絕對(duì)路徑:在描述文件或文件夾時(shí),從根目錄開始導(dǎo)航的路徑
? ? ? ? 對(duì)于windows操作系統(tǒng)來說,盤符就是根
? ? ? ? ? ? ? ? 如:d:/Download
? ? ? ? ? ? ? ? d:/Download/大學(xué)資料.zip
? ? ? ? 對(duì)于linux操作系統(tǒng)來說,/ 就是根
? ? ? ? ? ? ? ? /Download
相對(duì)路徑:在描述文件或文件夾下,不是從根目錄開始導(dǎo)航的路徑
? ? ? ? 例如:download/1.txt
相當(dāng)于誰呢?
? ? ? ? 對(duì)于IDEA中,JUnit的test方法,相對(duì)路徑是相當(dāng)于當(dāng)前的模塊
? ? ? ? 對(duì)于IDEA中,main方法,相對(duì)路徑是相當(dāng)于當(dāng)前的project
(2)構(gòu)造路徑
在new File()對(duì)象時(shí),在()中填寫的路徑。
構(gòu)造路徑可以是相對(duì)路徑,也可以是絕對(duì)路徑。
(3)規(guī)范路徑
如果路徑名中出現(xiàn)了".."等情況,會(huì)進(jìn)行解析
String getPath():獲取的是構(gòu)造路徑的值
String getAbsolutePath():獲取絕對(duì)路徑的值
String getCanonicalPath():獲取規(guī)范路徑的值
(4)File類的常用方法系列3
創(chuàng)建文件和文件夾的方法
public boolean createNewFile() throws IOException:創(chuàng)建一個(gè)新文件
public boolean mkdir():創(chuàng)建文件夾,這個(gè)是文件夾只能一個(gè)一個(gè)創(chuàng)建
public boolean mkdirs():創(chuàng)建文件夾,這個(gè)是文件夾的多個(gè)目錄可以一起創(chuàng)建
public Boolean delete():刪除文件或文件夾
? ? ? ? 如果文件夾是非空目錄,那么是無法刪除的。即只能刪除空文件夾。
(5)判斷某個(gè)File對(duì)象代表的文件或文件夾的情況:
public boolean exists():此File表示的文件或目錄是否實(shí)際存在
public boolean isDirectory():此File表示的是否為目錄
public boolean isFile():此File表示的是否為文件
如果指定的某個(gè)文件或文件夾的路徑名后,這個(gè)文件或文件夾在實(shí)際的路徑下不存在,不影響創(chuàng)建File類的對(duì)象。
如果File類對(duì)象的代表的文件或文件夾不存在,那么它既不是文件夾也不是文件。
(6)對(duì)于文件夾的File對(duì)象來說,可以進(jìn)行如下操作:
public String[] list():返回一個(gè)String數(shù)組,表示該File目錄中的所有的子文件或目錄。
public File[] listFiles():返回一個(gè)File數(shù)組,表示該File目錄中的所有的子文件或目錄
public File[] listFiles(FileFilter filter):返回所有滿足指定過濾器的文件和目錄。如果給定 filter 為 null,則接受所有路徑名。否則,當(dāng)且僅當(dāng)在路徑名上調(diào)用過濾器的 FileFilter.accept(File pathname)方法返回 true 時(shí),該路徑名才滿足過濾器。如果當(dāng)前File對(duì)象不表示一個(gè)目錄,或者發(fā)生 I/O 錯(cuò)誤,則返回 null。
public String[] list(FilenameFilter filter):返回返回所有滿足指定過濾器的文件和目錄。如果給定 filter 為 null,則接受所有路徑名。否則,當(dāng)且僅當(dāng)在路徑名上調(diào)用過濾器的 FilenameFilter .accept(File dir, String name)方法返回 true 時(shí),該路徑名才滿足過濾器。如果當(dāng)前File對(duì)象不表示一個(gè)目錄,或者發(fā)生 I/O 錯(cuò)誤,則返回 null。
public File[] listFiles(FilenameFilter filter):返回返回所有滿足指定過濾器的文件和目錄。如果給定 filter 為 null,則接受所有路徑名。否則,當(dāng)且僅當(dāng)在路徑名上調(diào)用過濾器的 FilenameFilter .accept(File dir, String name)方法返回 true 時(shí),該路徑名才滿足過濾器。如果當(dāng)前File對(duì)象不表示一個(gè)目錄,或者發(fā)生 I/O 錯(cuò)誤,則返回 null。
java.io.FileFilter:文件過濾接口
? ? ? ? 抽象方法:boolean accept(File pathname)
? ? ? ? pathname是某個(gè)文件夾在列出下一級(jí)時(shí)的每一個(gè)下一級(jí)
? ? ? ? 如果pathname根據(jù)某個(gè)條件返回true,就表示要留下這個(gè)文件或文件夾。
代碼整合:
public class TestFile {@Testpublic void test17(){//獲取download下面的所有圖片 以.jpg為例File dir = new File("d:\\download");listAllJpgImageSubs(dir);}public void listAllJpgImageSubs(File dir){if(dir.isDirectory()){//條件成立的話,說明是一個(gè)存在的文件夾File[] files = dir.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.getName().endsWith(".jpg") || pathname.isDirectory();}});for (File sub : files) {if(sub.isDirectory()){listAllJpgImageSubs(sub);}else{System.out.println(sub);}}}}@Testpublic void test16() {File dir = new File("d:\\download");listAllSubs(dir);}public void listAllSubs(File dir){if(dir.isDirectory()){//條件成立的話,說明是一個(gè)存在的文件夾System.out.println(dir);File[] files = dir.listFiles();for (File sub : files) {if(sub.isDirectory()){listAllSubs(sub);}else{System.out.println(sub);}}}}/*public void listAllSubs(File dir){System.out.println(dir);if(dir.isDirectory()){//條件成立的話,說明是一個(gè)存在的文件夾File[] files = dir.listFiles();for (File sub : files) {listAllSubs(sub);}}}*/@Testpublic void test15(){File dir = new File("d:\\download");String[] allSubs = dir.list();for (String sub : allSubs) {System.out.println(sub);}}@Testpublic void test14() throws IOException {File file = new File("d:/Download/北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zip");System.out.println(file.exists());//trueSystem.out.println(file.isDirectory());//falseSystem.out.println(file.isFile());//true}@Testpublic void test13(){File file = new File("d:\\1.txt");//new File對(duì)象只是在JVM的堆內(nèi)存中創(chuàng)建一個(gè)對(duì)象,不會(huì)真的在硬盤中創(chuàng)建一個(gè)文件或文件夾。//只有調(diào)用createNewFile或mkdir/mkdirs才會(huì)創(chuàng)建文件或文件夾System.out.println(file.exists());//falseSystem.out.println(file.isDirectory());//falseSystem.out.println(file.isFile());//falseSystem.out.println(file.length());//0System.out.println(file.lastModified());//0}@Testpublic void test12(){File file = new File("download\\1.txt");file.delete();File dir = new File("download");dir.delete();}@Testpublic void test11() throws IOException {File dir = new File("d:\\io\\java\\test\\aa");//dir是代表aa文件夾//dir.mkdir();//如果d:\io\java\test文件夾不存在,aa文件夾創(chuàng)建失敗,但是不會(huì)報(bào)異常dir.mkdirs();//如果d:\io\java\test文件夾不存在,連同它們和aa一起創(chuàng)建}@Testpublic void test10() throws IOException {File file = new File("d:/Download/北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zip");System.out.println(file.getPath());//d:\Download\北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zipSystem.out.println(file.getAbsolutePath());//d:\Download\北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zipSystem.out.println(file.getCanonicalPath());//D:\Download\北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zip}@Testpublic void test09() throws IOException {File file = new File("../../../download/1.txt");System.out.println(file.getPath());//..\..\..\download\1.txtSystem.out.println(file.getAbsolutePath());//D:\atguigu\javaee\JavaSE20220106\JavaSECode\day0218_22teacher_code\..\..\..\download\1.txtSystem.out.println(file.getCanonicalPath());//D:\atguigu\javaee\download\1.txt}@Testpublic void test08() throws IOException {File file = new File("d:/Download/北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zip");System.out.println(file.getPath());//d:\Download\北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zipSystem.out.println(file.getAbsolutePath());//d:\Download\北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zip}@Testpublic void test07() throws IOException {File file = new File("download/1.txt");System.out.println(file.getPath());//download\1.txtSystem.out.println(file.getAbsolutePath());//D:\atguigu\javaee\JavaSE20220106\JavaSECode\day0218_22teacher_code\download\1.txt}public static void main(String[] args) throws IOException{File dir = new File("download");dir.mkdir();//make directoryFile file = new File("download/1.txt");file.createNewFile();}@Testpublic void test06() throws IOException {File dir = new File("download");dir.mkdir();//make directoryFile file = new File("download/1.txt");file.createNewFile();}@Testpublic void test05() {File file = new File("d:/Download");System.out.println(file);System.out.println("文件夾名字:" + file.getName());System.out.println("文件夾路徑名:" + file.getPath());System.out.println("文件夾大小:" + file.length());//錯(cuò)誤的System.out.println("最后修改時(shí)間:" +file.lastModified());long time = file.lastModified();Date date = new Date(time);System.out.println("最后修改時(shí)間:" + date);}@Testpublic void test04() {File file = new File("d:/Download/北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zip");System.out.println(file);System.out.println("文件名字:" + file.getName());System.out.println("文件路徑名:" + file.getPath());System.out.println("文件大小:" + file.length());System.out.println("最后修改時(shí)間:" +file.lastModified());long time = file.lastModified();Date date = new Date(time);System.out.println("最后修改時(shí)間:" + date);}@Testpublic void test03() {File file = new File("d:/Download/北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zip");System.out.println(file);}@Testpublic void test02() {File file = new File("d:\\Download","北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zip");System.out.println(file);}@Testpublic void test01(){File file = new File("d:\\Download\\北華大學(xué)實(shí)訓(xùn)歸檔材料-王海龍.zip");File dir = new File("d:\\Download");System.out.println(file);System.out.println(dir);}
}
練習(xí)題(1):求某個(gè)目錄(某個(gè)文件夾)總大小
public class Exercise1 {public static void main(String[] args) {File dir = new File("d:\\學(xué)習(xí)資料");
// System.out.println(dir.length());//無法直接通過length方法獲取文件夾的總大小System.out.println(getDirectoryLength(dir));}public static long getDirectoryLength(File dir){/*用一個(gè)變量,累加這個(gè)文件夾里面(包含下一級(jí)的下一級(jí))的文件的大小。*/long sum = 0;if(dir.isFile()){//如果dir是文件,那么直接用length方法表示大小sum = dir.length();}else if(dir.isDirectory()){//列出文件夾的下一級(jí)File[] files = dir.listFiles();for (File sub : files) {//sub是dir的下一級(jí),它可能是一個(gè)文件,也可能是一個(gè)文件夾
// sum += sub的大小;sum += getDirectoryLength(sub);}}return sum;}}
練習(xí)題(2):遞歸刪除非空目錄
public class Exercise2 {public static void main(String[] args) {//友情提示:找一個(gè)沒有用的文件夾測試,不然刪除后,不在回收站File dir = new File("d:\\學(xué)習(xí)資料");
// dir.delete();forceDeleteDirectory(dir);}public static void forceDeleteDirectory(File dir){/*思路:先把dir的下一級(jí)干掉,再刪除dir自己*///先把dir的下一級(jí)干掉if(dir.isDirectory()){File[] files = dir.listFiles();for (File sub : files) {//sub是dir的下一級(jí),可能是文件,可能是文件夾,而且文件夾可能是非空的forceDeleteDirectory(sub);}}//刪除dir自己dir.delete();}
}