java:File類
第一章 File類
1.1 概述
java.io.File 類是檔案和目錄路徑名的抽象表示,主要用於檔案和目錄的建立、查詢和刪除等操作。
1.2 構造方法
public File(String pathname) ` :通過將給定的**路徑名字串**轉換為抽象路徑名來建立新的 File例項。
public File(String parent, String child) ` :從**父路徑名字串和子路徑名字串**建立新的 File例項。
public File(File parent, String child)` :從**父抽象路徑名和子路徑名字串**建立新的 File例項。
java.io.File類
檔案和目錄路徑名的抽象表示形式。
java把電腦中的檔案和資料夾(目錄)封裝為了一個File類,
我們可以使用File類對檔案和資料夾進行操作
我們可以使用File類的方法
建立一個檔案/資料夾
刪除檔案/資料夾
獲取檔案/資料夾
判斷檔案/資料夾是否存在
對資料夾進行遍歷
獲取檔案的大小
File類是一個與系統無關的類,任何的作業系統都可以使用這個類中的方法
重點:記住這三個單詞
file:檔案
directory:資料夾/目錄
path:路徑
public class Demo01File { public static void main(String[] args) { /* static String pathSeparator 與系統有關的路徑分隔符,為了方便, 它被表示為一個字串。 static char pathSeparatorChar 與系統有關的路徑分隔符。 static String separator 與系統有關的預設名稱分隔符, 為了方便,它被表示為一個字串。 static char separatorChar 與系統有關的預設名稱分隔符。 操作路徑:路徑不能寫死了 C:\develop\a\a.txt windows C:/develop/a/a.txt linux "C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt"View Code*/ String pathSeparator = File.pathSeparator; System.out.println(pathSeparator);//路徑分隔符 windows:分號; linux:冒號: String separator = File.separator; System.out.println(separator);// 檔名稱分隔符 windows:反斜槓\ linux:正斜槓/ } }
@Test public void FileTestDemo1(){ String pathSeparator=File.pathSeparator; System.out.println(pathSeparator);//路徑分隔符 windows:分號; linux:冒號: String separator = File.separator; System.out.println(separator);// 檔名稱分隔符 windows:反斜槓\ linux:正斜槓/ File f=new File("D:\\workplace\\java\\idea\\Test1"); long length=f.length(); System.out.println(length); }View Code
> 1. 一個File物件代表硬碟中實際存在的一個檔案或者目錄。
> 2. 無論該路徑下是否存在檔案或者目錄,都不影響File物件的建立。
1.3 常用方法
獲取功能的方法
public String getAbsolutePath() ` :返回此File的絕對路徑名字串。
public String getPath() ` :將此File轉換為路徑名字串。
public String getName()` :返回由此File表示的檔案或目錄的名稱。
public long length()` :返回由此File表示的檔案的長度。
路徑:
絕對路徑:是一個完整的路徑
以碟符(c:,D:)開始的路徑
c:\\a.txt
C:\\Users\itcast\\IdeaProjects\\shungyuan\\123.txt
D:\\demo\\b.txt
相對路徑:是一個簡化的路徑
相對指的是相對於當前專案的根目錄(C:\\Users\itcast\\IdeaProjects\\shungyuan)
如果使用當前專案的根目錄,路徑可以簡化書寫
C:\\Users\itcast\\IdeaProjects\\shungyuan\\123.txt-->簡化為: 123.txt(可以省略專案的根目錄)
注意:
1.路徑是不區分大小寫
2.路徑中的檔名稱分隔符windows使用反斜槓,反斜槓是轉義字元,兩個反斜槓代表一個普通的
public String getAbsolutePath() :返回此File的絕對路徑名字串。
獲取的構造方法中傳遞的路徑
無論路徑是絕對的還是相對的,getAbsolutePath方法返回的都是絕對路徑
/* public String getAbsolutePath() :返回此File的絕對路徑名字串。 獲取的構造方法中傳遞的路徑 無論路徑是絕對的還是相對的,getAbsolutePath方法返回的都是絕對路徑 */ @Test public void FileTestDemo4(){ File f1 = new File("D:\\workplace\\java\\idea\\Test1\\a.txt"); String absolutePath1 = f1.getAbsolutePath(); System.out.println(absolutePath1); File f2 = new File("a.txt"); String absolutePath2 = f2.getAbsolutePath(); System.out.println(absolutePath2); /* * D:\workplace\java\idea\Test1\a.txt D:\workplace\java\idea\Test1\a.txt * 由於是絕對路徑所以... * */ }View Code
public String getPath() :將此File轉換為路徑名字串。
獲取的構造方法中傳遞的路徑
toString方法呼叫的就是getPath方法
原始碼:
public String toString() {
return getPath();
}
/* public String getPath() :將此File轉換為路徑名字串。 獲取的構造方法中傳遞的路徑 toString方法呼叫的就是getPath方法 原始碼: public String toString() { return getPath(); } */ @Test public void FileTestDemo5(){ File f1 = new File("D:\\workplace\\java\\idea\\Test1\\a.txt"); File f2 = new File("a.txt"); System.out.println(f1.getPath());//D:\workplace\java\idea\Test1\a.txt System.out.println(f2.getPath());//a.txt }View Code
public String getName() :返回由此File表示的檔案或目錄的名稱。
獲取的就是構造方法傳遞路徑的結尾部分(檔案/資料夾)
/* public String getName() :返回由此File表示的檔案或目錄的名稱。 獲取的就是構造方法傳遞路徑的結尾部分(檔案/資料夾) */ @Test public void FileTestDemo6(){ File f1 = new File("D:\\workplace\\java\\idea\\Test1\\a.txt"); File f2= new File("D:\\workplace\\java\\idea\\Test1"); System.out.println(f1.getName());//a.txt System.out.println(f2.getName());//Test1 }View Code
public long length() :返回由此File表示的檔案的長度。
獲取的是構造方法指定的檔案的大小,以位元組為單位
注意:
資料夾是沒有大小概念的,不能獲取資料夾的大小
如果構造方法中給出的路徑不存在,那麼length方法返回0
/* public long length() :返回由此File表示的檔案的長度。 獲取的是構造方法指定的檔案的大小,以位元組為單位 注意: 資料夾是沒有大小概念的,不能獲取資料夾的大小 如果構造方法中給出的路徑不存在,那麼length方法返回0 */ @Test public void FileTestDemo7(){ File f1 = new File("D:\\workplace\\java\\idea\\Test1\\a.txt");//檔案真實存在 File f2 = new File("D:\\workplace\\java\\idea\\Test1\\b.txt");//檔案不存在 System.out.println(f1.length());//不為0 System.out.println(f2.length());//0 }View Code
File類判斷功能的方法
- public boolean exists() :此File表示的檔案或目錄是否實際存在。
- public boolean isDirectory() :此File表示的是否為目錄。
- public boolean isFile() :此File表示的是否為檔案。
/* File類判斷功能的方法 - public boolean exists() :此File表示的檔案或目錄是否實際存在。 - public boolean isDirectory() :此File表示的是否為目錄。 - public boolean isFile() :此File表示的是否為檔案。 */ @Test public void FileTestDemo8(){ /* public boolean isDirectory() :此File表示的是否為目錄。 用於判斷構造方法中給定的路徑是否以資料夾結尾 是:true 否:false public boolean isFile() :此File表示的是否為檔案。 用於判斷構造方法中給定的路徑是否以檔案結尾 是:true 否:false 注意: 電腦的硬碟中只有檔案/資料夾,兩個方法是互斥 這兩個方法使用前提,路徑必須是存在的,否則都返回false */ /* public boolean exists() :此File表示的檔案或目錄是否實際存在。 用於判斷構造方法中的路徑是否存在 存在:true 不存在:false */ //本部分可以直接參考原始碼,主要的目的在於判斷是否存在的問題 }View Code
import java.io.File; /* File類判斷功能的方法 - public boolean exists() :此File表示的檔案或目錄是否實際存在。 - public boolean isDirectory() :此File表示的是否為目錄。 - public boolean isFile() :此File表示的是否為檔案。 */ public class Demo04File { public static void main(String[] args) { show02(); } /* public boolean isDirectory() :此File表示的是否為目錄。 用於判斷構造方法中給定的路徑是否以資料夾結尾 是:true 否:false public boolean isFile() :此File表示的是否為檔案。 用於判斷構造方法中給定的路徑是否以檔案結尾 是:true 否:false 注意: 電腦的硬碟中只有檔案/資料夾,兩個方法是互斥 這兩個方法使用前提,路徑必須是存在的,否則都返回false */ private static void show02() { File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shung"); //不存在,就沒有必要獲取 if(f1.exists()){ System.out.println(f1.isDirectory()); System.out.println(f1.isFile()); } File f2 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan"); if(f2.exists()){ System.out.println(f2.isDirectory());//true System.out.println(f2.isFile());//false } File f3 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\shungyuan.iml"); if(f3.exists()){ System.out.println(f3.isDirectory());//false System.out.println(f3.isFile());//true } } /* public boolean exists() :此File表示的檔案或目錄是否實際存在。 用於判斷構造方法中的路徑是否存在 存在:true 不存在:false */ private static void show01() { File f1 = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan"); System.out.println(f1.exists());//true File f2 = new File("C:\\Users\\itcast\\IdeaProjects\\shung"); System.out.println(f2.exists());//false File f3 = new File("shungyuan.iml");//相對路徑 C:\Users\itcast\IdeaProjects\shungyuan\shungyuan.iml System.out.println(f3.exists());//true File f4 = new File("a.txt"); System.out.println(f4.exists());//false } }View Code
File類建立刪除功能的方法
- public boolean createNewFile() :當且僅當具有該名稱的檔案尚不存在時,建立一個新的空檔案。
- public boolean delete() :刪除由此File表示的檔案或目錄。
- public boolean mkdir() :建立由此File表示的目錄。
- public boolean mkdirs() :建立由此File表示的目錄,包括任何必需但不存在的父目錄。
@Test public void FileTestDemo9() throws IOException { /* public boolean createNewFile() :當且僅當具有該名稱的檔案尚不存在時,建立一個新的空檔案。 建立檔案的路徑和名稱在構造方法中給出(構造方法的引數) 返回值:布林值 true:檔案不存在,建立檔案,返回true false:檔案存在,不會建立,返回false 注意: 1.此方法只能建立檔案,不能建立資料夾 2.建立檔案的路徑必須存在,否則會丟擲異常 public boolean createNewFile() throws IOException createNewFile宣告丟擲了IOException,我們呼叫這個方法,就必須的處理這個異常,要麼throws,要麼trycatch */ File f1 = new File("D:\\workplace\\java\\idea\\Test1\\b.txt"); boolean b1 = f1.createNewFile(); System.out.println("b1:"+b1);//true建立成功 } /* public boolean mkdir() :建立單級空資料夾 public boolean mkdirs() :既可以建立單級空資料夾,也可以建立多級資料夾 建立資料夾的路徑和名稱在構造方法中給出(構造方法的引數) 返回值:布林值 true:資料夾不存在,建立資料夾,返回true false:資料夾存在,不會建立,返回false;構造方法中給出的路徑不存在返回false 注意: 1.此方法只能建立資料夾,不能建立檔案 */ @Test public void FileTestDemo10(){ File f1 = new File("D:\\workplace\\java\\idea\\Test1\\11"); boolean b1 = f1.mkdir(); System.out.println("b1:"+b1); File f2 = new File("D:\\workplace\\java\\idea\\Test1\\11\\22"); boolean b2 = f2.mkdirs(); System.out.println("b2:"+b2); File f3 = new File("08_FileAndRecursion\\abc.txt"); boolean b3 = f3.mkdirs();//看型別,是一個檔案 System.out.println("b3:"+b3); File f4 = new File("08_F\\ccc"); boolean b4 = f4.mkdirs();//不會丟擲異常,路徑不存在,不會建立 System.out.println("b4:"+b4); } /* public boolean delete() :刪除由此File表示的檔案或目錄。 此方法,可以刪除構造方法路徑中給出的檔案/資料夾 返回值:布林值 true:檔案/資料夾刪除成功,返回true false:資料夾中有內容,不會刪除返回false;構造方法中路徑不存在false 注意: delete方法是直接在硬碟刪除檔案/資料夾,不走回收站,刪除要謹慎 */ @Test public void FileTestDemo11(){ File f1 = new File("D:\\workplace\\java\\idea\\Test1\\11\\22"); boolean b1 = f1.delete(); System.out.println("b1:"+b1); File f2 = new File("D:\\workplace\\java\\idea\\Test1\\11"); System.out.println(f2.delete()); }View Code
File類遍歷(資料夾)目錄功能
- public String[] list() :返回一個String陣列,表示該File目錄中的所有子檔案或目錄。
- public File[] listFiles() :返回一個File陣列,表示該File目錄中的所有的子檔案或目錄。
注意:
list方法和listFiles方法遍歷的是構造方法中給出的目錄
如果構造方法中給出的目錄的路徑不存在,會丟擲空指標異常
如果構造方法中給出的路徑不是一個目錄,也會丟擲空指標異常
/* File類遍歷(資料夾)目錄功能 - public String[] list() :返回一個String陣列,表示該File目錄中的所有子檔案或目錄。 - public File[] listFiles() :返回一個File陣列,表示該File目錄中的所有的子檔案或目錄。 注意: list方法和listFiles方法遍歷的是構造方法中給出的目錄 如果構造方法中給出的目錄的路徑不存在,會丟擲空指標異常 如果構造方法中給出的路徑不是一個目錄,也會丟擲空指標異常 */ @Test public void FileTestDemo12(){ /* public File[] listFiles() :返回一個File陣列,表示該File目錄中的所有的子檔案或目錄。 遍歷構造方法中給出的目錄,會獲取目錄中所有的檔案/資料夾,把檔案/資料夾封裝為File物件, 多個File物件儲存到File陣列中 */ File file=new File("D:\\workplace\\java\\idea\\Test1"); File [] files=file.listFiles(); for(File f:files){ System.out.println(f);//輸出的是路徑 } } /* public String[] list() :返回一個String陣列,表示該File目錄中的所有子檔案或目錄。 遍歷構造方法中給出的目錄,會獲取目錄中所有檔案/資料夾的名稱, 把獲取到的多個名稱儲存到一個String型別的陣列中 */ @Test public void FileTestDemo13(){ File file=new File("D:\\workplace\\java\\idea\\Test1"); String [] arr=file.list(); for(String fileName:arr){ System.out.println(fileName); } }View Code
import java.io.File; /* 練習: 遞迴列印多級目錄 需求: 遍歷c:\\abc資料夾,及abc資料夾的子資料夾 只要.java結尾的檔案 c:\\abc c:\\abc\\abc.txt c:\\abc\\abc.java c:\\abc\\a c:\\abc\\a\\a.jpg c:\\abc\\a\\a.java c:\\abc\\b c:\\abc\\b\\b.java c:\\abc\\b\\b.txt */ public class FileMain { public static void main(String[] args) { File file = new File("D:\\workplace\\java\\idea\\Test1"); getAllFile(file); } public static void getAllFile(File dir){ File[] files = dir.listFiles(); for(File f:files){ //對遍歷得到的File物件f進行判斷,判斷是否是資料夾 if(f.isDirectory()){ //f是一個資料夾,則繼續遍歷這個資料夾 //我們發現getAllFile方法就是傳遞資料夾,遍歷資料夾的方法 //所以直接呼叫getAllFile方法即可:遞迴(自己呼叫自己) getAllFile(f); }else{ //f是一個檔案,直接列印即可 /* c:\\abc\\abc.java 只要.java結尾的檔案 1.把File物件f,轉為字串物件 */ //String name = f.getName();//abc.java //String path = f.getPath();//c:\\abc\\abc.java //String s = f.toString();//c:\\abc\\abc.java //把字串,轉換為小寫 //s = s.toLowerCase(); //2.呼叫String類中的方法endsWith判斷字串是否是以.java結尾 //boolean b = s.endsWith(".java"); //3.如果是以.java結尾的檔案,則輸出 /*if(b){ System.out.println(f); }*/ String name=f.getName(); System.out.println(name); if(f.getName().toLowerCase().endsWith(".java")){ System.out.println(f); } } } } }View Code