java.io.File 類是文件和目錄路徑名的抽象表示,主要用於文件和目錄的建立、查找和刪除等操做。java
語法編程
public File(String pathname)
:經過將給定的路徑名字符串轉換爲抽象路徑名來建立新的 File實例。public File(String parent, String child)
:從父路徑名字符串和子路徑名字符串建立新的 File實例。public File(File parent, String child)
:從父抽象路徑名和子路徑名字符串建立新的 File實例。代碼數組
// 建立File對象-方式1 File file1 = new File("D:\\JavaCode\\BasicCode\\a"); System.out.println(file1); // 建立File對象-方式2 File file2 = new File("D:\\JavaCode\\BasicCode\\a","1.txt"); System.out.println(file2); // 建立File對象-方式3 File file3 = new File(file1,"1.txt"); System.out.println(file3);
注意事項ide
靜態成員函數
public static final String pathSeparator
public static final String separator
代碼測試
System.out.println(File.pathSeparator); // ";" System.out.println(File.separator); // "/" // 注意:不一樣的操做系統獲取的分隔符是不同的
獲取功能-相關方法操作系統
方法3d
public String getAbsolutePath()
:返回此File的絕對路徑名字符串。public String getPath()
:將此File轉換爲路徑名字符串。public String getName()
:返回由此File表示的文件或目錄的名稱。public long length()
:返回由此File表示的文件的長度。代碼code
public static void main(String[] args) { // 1. `public String getAbsolutePath() `:返回此File的絕對路徑名字符串。 show1(); // 2. `public String getPath()` :將此File轉換爲路徑名字符串。 show2(); // 3. `public String getName() `:返回由此File表示的文件或目錄的名稱。 show3(); // 4. `public long length() `:返回由此File表示的文件的長度(文件的大小) show4(); } private static void show4() { // 不存在的文件夾或不存在的文件或存在的文件夾返回的都是0 File file1 = new File("D:\\JavaCode\\BasicCode\\a"); System.out.println(file1.length()); // 0 File file3 = new File("D:\\JavaCode\\BasicCode\\aa"); System.out.println(file3.length()); //0 File file2 = new File("D:\\JavaCode\\BasicCode\\a\\logo01.png"); System.out.println(file2.length()); //11610 字節 } private static void show3() { File file1 = new File("D:\\JavaCode\\BasicCode\\a"); System.out.println(file1.getName()); // a File file2 = new File("1.txt"); // 1.txt System.out.println(file2.getName()); } private static void show2() { // 文件路徑是什麼就返回什麼 File file1 = new File("D:\\JavaCode\\BasicCode\\1.txt"); System.out.println(file1.getPath()); // D:\JavaCode\BasicCode\1.txt File file2 = new File("1.txt"); // 1.txt System.out.println(file2.getPath()); } private static void show1() { File file1 = new File("D:\\JavaCode\\BasicCode\\1.txt"); System.out.println(file1.getAbsoluteFile()); // D:\JavaCode\BasicCode\1.txt File file2 = new File("1.txt"); // D:\JavaCode\BasicCode\1.txt System.out.println(file2.getAbsoluteFile()); }
絕對路徑和相對路徑對象
判斷功能-相關方法
方法
public boolean exists()
:此File表示的文件或目錄是否實際存在。public boolean isDirectory()
:此File表示的是否爲目錄。public boolean isFile()
:此File表示的是否爲文件。代碼
File file1 = new File("a"); // 1. `public boolean exists()` :此File表示的文件或目錄是否實際存在。 System.out.println(file1.exists()); // true // 2. `public boolean isDirectory()` :此File表示的是否爲目錄。 System.out.println(file1.isDirectory()); // true // 3. `public boolean isFile()` :此File表示的是否爲文件。 System.out.println(file1.isFile()); // false
建立刪除功能-相關方法
方法
public boolean createNewFile()
:當且僅當具備該名稱的文件尚不存在時,建立一個新的空文件。public boolean delete()
:刪除由此File表示的文件或目錄。public boolean mkdir()
:建立由此File表示的目錄。public boolean mkdirs()
:建立由此File表示的目錄,包括任何須需但不存在的父目錄。代碼
public static void main(String[] args) throws IOException { // 1. `public boolean createNewFile()` :當且僅當具備該名稱的文件尚不存在時,建立一個新的空文件。 File file1 = new File("a"); // 已經存在的文件目錄 System.out.println(file1.createNewFile()); // false File file2 = new File("b"); // 不存在的文件 System.out.println(file2.createNewFile()); // true // 2. `public boolean delete() `:刪除由此File表示的文件或目錄。 File file3 = new File("c"); // 不存在的文件 System.out.println(file3.delete()); // false File file4 = new File("b"); // 不存在的文件 System.out.println(file4.delete()); // true // 3. `public boolean mkdir()` :建立由此File表示的目錄。 File file5 = new File("e"); // 不存在的文件目錄 System.out.println(file5.mkdir()); // true File file6 = new File("e//g/f"); // 多級文件目錄 System.out.println(file6.mkdir()); // false // 4. `public boolean mkdirs() `:建立由此File表示的目錄,包括任何須需但不存在的父目錄。 System.out.println(file6.mkdirs()); // true }
方法
public String[] list()
:返回一個String數組,表示該File目錄中的全部子文件或目錄。public File[] listFiles()
:返回一個File數組,表示該File目錄中的全部的子文件或目錄。代碼
// 1. `public String[] list()` :返回一個String數組,表示該File目錄中的全部子文件或目錄。 File file1 = new File("D:\\JavaCode\\BasicCode"); String[]files = file1.list(); for (int i = 0; i < files.length; i++) { System.out.println(files[i]); } //2. `public File[] listFiles()` :返回一個File數組,表示該File目錄中的全部的子文件或目錄。 File file2 = new File("D:\\JavaCode\\BasicCode"); File[]files2 = file2.listFiles(); for (int i = 0; i < files2.length; i++) { System.out.println(files2[i]); }
注意事項
需求:計算數字1 ~ n的和
分析:num的累和 = num + (num-1)的累和,因此能夠把累和的操做定義成一個方法,遞歸調用。
代碼:
// 計算數字1 ~ n的和 public static void main(String[] args) { int sum = getSum(3); System.out.println(sum); } private static int getSum(int n) { // 判斷遞歸結束條件 if(n==1) { return 1; } // 遞歸任務 return n + getSum(n-1); }
圖解:
需求:階乘全部小於及等於該數的正整數的積。
n的階乘:n! = n * (n‐1) *...* 3 * 2 * 1 x
分析:這與累和相似,只不過換成了乘法運算
n! = n * (n‐1)!
代碼
public static void main(String[] args) { int result = factorial(3); System.out.println(result); } private static int factorial(int n) { if(n==1) { return 1; } return n * factorial(n-1); }
需求:打印多級目錄及文件
代碼:
public static void main(String[] args) { File file = new File("D:\\JavaCode\\BasicCode\\dir"); readFile(file); } // 定義讀取目錄文件的方法 private static void readFile(File file) { // 獲取子文件和子目錄 File[]files = file.listFiles(); // 循環遍歷子文件和子目錄 for (File f : files) { if(f.isDirectory()){ readFile(f); }else { System.out.println(f); } } }
需求: 給一個指定的目錄,遞歸實現過濾出該目錄中全部的以及嵌套目中.java文件
代碼:
public static void main(String[] args) { File file = new File("D:\\JavaCode\\BasicCode"); readFile(file); } // 定義讀取目錄文件的方法 private static void readFile(File file) { // 獲取子文件和子目錄 File[]files = file.listFiles(); // 循環遍歷子文件和子目錄 for (File f : files) { if(f.isDirectory()){ readFile(f); }else { if(f.getName().toLowerCase().endsWith(".java")){ System.out.println(f); } } } }
java.io.FileFilter
是一個接口,是File的過濾器。 該接口的對象能夠傳遞給File類的 listFiles(FileFilter)
方法做爲參數, 接口中只有一個方法。
boolean accept(File pathname)
:測試pathname是否應該包含在當前File目錄中,符合則返回true。
需求:和上述練習4同樣
分析:
接口做爲參數,須要傳遞子類對象,重寫其中方法。咱們選擇匿名內部類方式,比較簡單。
accept 方法,參數爲File,表示當前File下全部的子文件和子目錄。保留住則返回true,過濾掉則返回 false。保留規則:
經過過濾器的做用, listFiles(FileFilter) 返回的數組元素中,子文件對象都是符合條件的,能夠直接打
印。
代碼1:匿名內部類
public static void main(String[] args) { File file = new File("D:\\JavaCode\\BasicCode"); readFile(file); } // 定義讀取目錄文件的方法 private static void readFile(File file) { // 獲取子文件和子目錄 File[]files = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { // 符合條件的File return pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".java"); } }); // 循環遍歷子文件和子目錄 for (File f : files) { if(f.isFile()){ System.out.println(f); }else { readFile(f); } } }
代碼2:Lambda表達式
public static void main(String[] args) { File file = new File("D:\\JavaCode\\BasicCode"); readFile(file); } // 定義讀取目錄文件的方法 private static void readFile(File file) { // 獲取子文件和子目錄 File[]files = file.listFiles(pathname -> pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".java")); // 循環遍歷子文件和子目錄 for (File f : files) { if(f.isFile()){ System.out.println(f); }else { readFile(f); } } }