1、介紹
File類是java.io包下代表與平台無關的文件和目錄,也就是說,如果希望在程序中操作文件和目錄,都可以通過File類來完成。不管是文件還是目錄都是使用File來操作的,File能新建、刪除、重命名文件和目錄,File不能訪問文件內容本身。如果需要訪問文件內容本身,則需要使用輸入/輸出流。
2.靜態變量
public class FileDemo { public static void main(String[] args) { // File類靜態成員變量 // 與系統有關的路徑分割符 String separator = File.pathSeparator; System.out.println(separator); // 輸出結果為‘;’ // 與系統有關的默認名稱分割符 separator = File.separator; System.out.println(separator); // 輸出結果為‘\’ } }
3、構造方法
· public File(String pathname):根據一個路徑得到File對象
· public File(String parent,String child):根據一個目錄和一個子文件/目錄得到File對象
· public File(File parent,String child):根據一個父File對象和一個子文件/目錄得到File對象
構造方法一:public File(String pathname)
這里的pathname可以是文件名,也可以是文件夾
代碼:

1 // 文件夾 2 public class FileConstructor { 3 public static void main(String[] args){ 4 File file = new File("F://Code"); 5 System.out.println(file); 6 } 7 }
輸出結果:F:\Code
代碼:
// 文件名 public class FileConstructor { public static void main(String[] args){ File file = new File("F://Code//123.txt"); System.out.println(file); } }
輸出結果: F:\Code\123.txt
構造方法二:public File(String parent,String child)
代碼:
public class FileConstructor { public static void main(String[] args){ File file = new File("F:", "Code"); System.out.println(file); } }
輸出結果:F:\Code
構造方法三:public File(File parent,String child)
代碼:
public class FileConstructor { public static void main(String[] args){ File parent = new File("F:"); File file = new File(parent, "Code"); System.out.println(file); } }
輸出結果:F:\Code
4.File類常用方法
方法1.boolean createNewFile()方法:用於創建文件
注意:只能用來創建文件,而無法創建文件夾。
代碼:
public class FileConstructor { public static void main(String[] args) throws IOException { // 創建的文件名和文件路徑,在File的構造方法中給出 File file = new File("F:\\123.txt"); boolean b = file.createNewFile(); System.out.println(b); } }
注:當在F盤下不存在123.txt文件時,調用 createNewFile() 將會創建123.txt,並返回一個布爾值:true;當F盤下已經存在123.txt文件時,調用createNewFile()方法將會返回false。
方法2.boolean mkdir()方法:用於創建文件夾
創建的路徑在File的構造方法中給出
如果文件夾已存在,則不再創建
只能創建一層文件夾
代碼:

1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("F:\\123"); 4 boolean b = file.mkdir(); 5 System.out.println(b); 6 } 7 }
文件夾不存在:輸出結果為 true
文件夾已存在:輸出結果為 false
方法3.boolean mkdirs():用於創建文件夾
同mkdir()類似,只是該方法可以創建多層文件夾,推薦使用該方法
代碼:

1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("F:\\123\\a\\b\\c"); 4 boolean b = file.mkdirs(); 5 System.out.println(b); 6 } 7 }
方法4.boolean delete():用於刪除文件或文件夾
刪除的文件或者文件夾,在File類的構造函數中給出
刪除成功返回true,刪除失敗返回false
刪除方法,不走回收站,直接從硬盤中刪除
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("F:\\123\\a.txt"); 4 boolean newFile = file.delete(); 5 System.out.println(newFile); 6 } 7 }
方法5.String getName():返回路徑中表示的文件名或者文件夾名
獲取路徑中最后部分的名字
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("F:\\123\\a.txt"); 4 System.out.println(file.getName()); 5 } 6 }
輸出結果:a.txt
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("F:\\123"); 4 System.out.println(file.getName()); 5 } 6 }
輸出結果:123
方法6:long length():返回路徑中表示的文件的字節數
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("F:\\123\\123.txt"); 4 System.out.println(file.length()); 5 } 6 }
輸出文件123.txt的字節數
方法7:String getAbsolutePath():獲取文件的絕對路徑,返回String對象
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("123.txt"); 4 System.out.println(file.getAbsolutePath()); 5 } 6 }
輸出結果:D:\JavaCode\cn.itcast.demo\123.txt
File對象中寫的是一個相對路徑,相對於當前項目而言,當前項目的絕對路徑
方法8:File getAbsoluteFile():獲取文件的絕對路徑,返回File對象
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("F:\\123.txt"); 4 System.out.println(file.getAbsoluteFile()); 5 } 6 }
輸出結果:F:\123.txt
方法9:String getParent():獲取父路徑,返回String對象
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("F:\\123.txt"); 4 System.out.println(file.getParent()); 5 } 6 }
輸出結果:F:\
方法10:File getParentFile():獲取父路徑,返回File對象
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("F:\\123.txt"); 4 System.out.println(file.getParentFile()); 5 } 6 }
輸出結果:F:\
方法11:boolean exists():判斷File構造方法中封裝路徑是否存在
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("src"); 4 System.out.println(file.exists()); 5 } 6 }
輸出結果:true
方法12:boolean isDirectory():判斷File構造方法中封裝的路徑是不是文件夾
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("src"); 4 System.out.println(file.isDirectory()); 5 } 6 }
輸出結果:true
方法13:boolean isFile():判斷File構造方法中封裝的路徑是不是文件
同上
方法14:String[] list():獲取File構造方法中封裝路徑中的文件和文件夾名(遍歷一個目錄),返回值只有文件名或文件夾名
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("E:\\ideaIU-2018.3.5.win"); 4 String[] fileNames = file.list(); 5 for(String fileName : fileNames) { 6 System.out.println(fileName); 7 } 8 } 9 }
輸出結果:
bin build.txt help Install-Windows-zip.txt ipr.reg jre32 jre64 lib license plugins product-info.json redist
方法15:File[] listFiles():獲取File構造方法中封裝路徑中的文件和文件夾名(遍歷一個目錄),返回的是目錄或文件的全路徑
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("E:\\ideaIU-2018.3.5.win"); 4 File[] files = file.listFiles(); 5 for(File f : files) { 6 System.out.println(f); 7 } 8 } 9 } 10
輸出結果:
E:\ideaIU-2018.3.5.win\bin E:\ideaIU-2018.3.5.win\build.txt E:\ideaIU-2018.3.5.win\help E:\ideaIU-2018.3.5.win\Install-Windows-zip.txt E:\ideaIU-2018.3.5.win\ipr.reg E:\ideaIU-2018.3.5.win\jre32 E:\ideaIU-2018.3.5.win\jre64 E:\ideaIU-2018.3.5.win\lib E:\ideaIU-2018.3.5.win\license E:\ideaIU-2018.3.5.win\plugins E:\ideaIU-2018.3.5.win\product-info.json E:\ideaIU-2018.3.5.win\redist
方法16:File[] listRoots(): 列出可用的文件系統根
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("E:\\ideaIU-2018.3.5.win"); 4 File[] files = file.listRoots(); 5 for(File f : files) { 6 System.out.println(f); 7 } 8 } 9 }
輸出結果:
C:\ D:\ E:\ F:\
方法17.文件過濾器:File[] listFiles(FileFilter filter):返回抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。
遍歷目錄的時候,可以根據需要,只獲取滿足條件的文件
遍歷目錄方法File[] listFiles()的重載形式:File[] listFiles(FileFilter filter),listFiles(FileFilter filter)中傳遞的參數為一個接口的實現類對象,該實現類需由自己定義,重寫抽象方法
在F盤下創建了一個Demo文件夾,該文件夾下包含兩個文件,分別是123.txt和Demo.java。下面的程序將實現通過過濾器只獲取后綴名為“.java”的文件
1.實現FileFilter接口,重寫accept方法(返回值為boolean類型)
1 import java.io.File; 2 import java.io.FileFilter; 3 4 public class MyFilter implements FileFilter { 5 6 @Override 7 public boolean accept(File pathname) { 8 return pathname.getName().endsWith(".java"); 9 } 10 }
2.創建的接口FileFilter實現類對象
3.將該對象作為listFiles(FileFilter filter)方法的參數傳入
1 public class FileConstructor { 2 public static void main(String[] args) throws IOException { 3 File file = new File("F:\\Demo"); 4 File[] files = file.listFiles(new MyFilter()); 5 for(File f : files) { 6 System.out.println(f); 7 } 8 } 9 }
輸出結果:F:\Demo\Demo.java
listFiles()遍歷目錄的同時,獲取到了文件的全路徑名,調用過濾器的方法accept(),將獲取到的路徑傳遞給accept方法的參數pathname。在accept方法中進行判斷,如果這個路徑是java文件,返回true,否則,返回false。一旦方法返回了true,listFiles就會將路徑保存到數組中。