目錄
一、File的屬性
二、File的構造方法
三、File的方法
四、代碼示例
1、getName,getParent,getPath方法
2、getAbsolutePath,getCanonicalPath方法
3、exists,isDirectory,createNewFile方法
4、createNewFile,delete,deleteOnExit
5、list,listFiles,mkdir,mkdirs,renameTo方法
????????本章內容,主要涉及文件的元信息、路徑的操作,并不存在對文件的讀寫操作。
????????Java通過 java.io.File 類來對一個文件(包括目錄)進行抽象的描述。注意:有File對象并不意味著真實存在該文件。
以下是對File的概述:
一、File的屬性
修飾符及類型 | 屬性 | 說明 |
static String | pathSeparator | 依賴于系統的路徑分隔符,String 類型的表示 |
static char | pathSeparatorChar | 依賴于系統的路徑分隔符,char類 型 |
這里路徑直接的分隔符是根據系統自動調整的,在開發過程中還是更推薦使用正斜杠 “ / ”。windows也支持正斜杠。
二、File的構造方法
簽名 | 說明 |
File(File parent, String child) | 根據父目錄 + 孩子文件路徑,創建?個新的 File 實例 |
File(String pathname) | 根據文件路徑創建?個新的 File 實例,路徑可以是絕 對路徑或者相對路徑 |
File(String parent, String child) | 根據父目錄 + 孩子文件路徑,創建?個新的 File 實 例,父目錄用路徑表示 |
這里主要介紹中間的構造方法,中間的是最常用的。注意:這里的決定路徑有兩種情況:
????????1、如果是在idea中運行程序,此時工作目錄就是在項目所在的目錄。
? ? ? ? 2、如果把代碼打包成一個jar包,此時工作目錄就是在jar包所在目錄。
三、File的方法
修飾符及返回值類型 | 方法簽名 | 說明 |
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() | 判斷??是否對?件有可寫權限 |
四、代碼示例
1、getName,getParent,getPath方法
絕對路徑的File對象,代碼如下
public class IODemo1 {public static void main(String[] args) {//指定文件的路徑File f1 = new File("C:/IOTest/test.txt");//絕對路徑System.out.println(f1.getPath());//返回File對象的?件路徑System.out.println(f1.getParent());//返回 File 對象的??錄?件路徑System.out.println(f1.getName());//返回 FIle 對象的純?件名稱}
}
執行結果:
相對路徑的File對象,代碼如下
public class IODemo1 {public static void main(String[] args) {//指定文件的路徑File f1 = new File("./test.txt");//絕對路徑System.out.println(f1.getPath());//返回File對象的?件路徑System.out.println(f1.getParent());//返回 File 對象的??錄?件路徑System.out.println(f1.getName());//返回 FIle 對象的純?件名稱}
}
執行結果:
2、getAbsolutePath,getCanonicalPath方法
使用絕對路徑創造一個File對象,代碼如下
public class IODemo2 {public static void main(String[] args) throws IOException {File f = new File("C:/IOTest/test.txt");//絕對路徑System.out.println(f.getAbsolutePath());//返回File對象的絕對路徑System.out.println(f.getCanonicalPath());//返回File對象的修飾過的絕對路徑}
}
執行結果:
使用相對路徑創建File對象,代碼如下:
public class IODemo2 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");//絕對路徑System.out.println(f.getAbsolutePath());//返回File對象的絕對路徑System.out.println(f.getCanonicalPath());//返回File對象的修飾過的絕對路徑}
}
執行結果:
可以看出,上面方法在絕對路徑中沒有啥差別,但在相對路徑的就有些許差別。getCanonicalPath返回File對象的修飾過的絕對路徑,也就沒有了點 ' . ' 修飾。
3、exists,isDirectory,createNewFile方法
使用相對路徑創建File對象,代碼如下:
public class IODemo3 {public static void main(String[] args) {File f = new File("./test.txt");boolean ret1 = f.exists();//判斷 File 對象描述的?件是否真實存在boolean ret2 = f.isDirectory();//判斷 File 對象代表的?件是否是?個?錄boolean ret3 = f.isFile();//判斷 File 對象代表的?件是否是?個普通?件System.out.println(ret1);System.out.println(ret2);System.out.println(ret3);}
}
執行結果:
4、createNewFile,delete,deleteOnExit
先創造出一個文件,使用createNewFile方法,代碼如下:
public class IODemo4 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");boolean ret1 = f.createNewFile();//根據 File對象,?動創建?個空?件。成功創建后返回 trueSystem.out.println(ret1);}
}
執行代碼前:
執行代碼后:
多了test.txt文件
delete方法刪除test.txt文件,代碼如下:
public class IODemo4 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");boolean ret1 = f.createNewFile();//根據 File對象,?動創建?個空?件。成功創建后返回 trueSystem.out.println(ret1);boolean ret = f.delete();//根據 File 對象,刪除該?件。成功刪除后返回 true?System.out.println(ret);}
}
執行結果:
test.txt文件沒有了。
deleteOnExit方法,在程序執行完后才會刪除指定的文件,代碼如下:
public class IODemo4 {public static void main(String[] args) throws IOException, InterruptedException {File f = new File("./test.txt");boolean ret1 = f.createNewFile();//根據 File對象,?動創建?個空?件。成功創建后返回 trueSystem.out.println(ret1);//根據 File 對象,標注?件將被刪除,刪除動作會到 JVM 運?結束時才會進?f.deleteOnExit();Thread.sleep(5000);}
}
執行前:
有test.txt文件。
執行后:
過5秒后才會刪除test.txt文件。
5、list,listFiles,mkdir,mkdirs,renameTo方法
list:
代碼如下:
public class IODemo5 {public static void main(String[] args) {File f = new File(".");String[] files = f.list();//返回 File 對象代表的?錄下的所有?件名System.out.println(Arrays.toString(files));}
}
執行結果:
listFiles:
代碼如下:
public class IODemo5 {public static void main(String[] args) {
// String[] files = f.list();//返回 File 對象代表的?錄下的所有?件名
// System.out.println(Arrays.toString(files));File f = new File(".");File[] files = f.listFiles();//返回File對象代表的?錄下的所有?件,以File對象表?System.out.println(Arrays.toString(files));}
}
執行結果:
mkdir:
代碼如下:
public class IODemo6 {public static void main(String[] args) {File f = new File("./aaa");//創建 File 對象代表的?錄boolean ret1 = f.mkdir();System.out.println(ret1);}
}
執行前:
執行后:
多出了aaa目錄。
mkdirs:
代碼如下:
public class IODemo7 {public static void main(String[] args) {File f = new File("./aaa/bbb/ccc");//創建 File 對象代表的?錄,如果必 要,會創建中間?錄boolean ret = f.mkdirs();System.out.println(ret);}
}
執行前:
執行后:
當前目錄下多了aaa/bbb/ccc。
renameTo:
代碼如下:
public class IODemo8 {public static void main(String[] args) {File src = new File("./test2.txt");File dest = new File("./test.txt");src.renameTo(dest);//進??件改名,也可以視為我們平時的剪切、粘貼操作}
}
執行前:
文件名是test.txt。
執行后:
文件名是test2.txt。
除重命名功能外,renameTo還有移動功能(移動比復制、粘貼效率高,前提是在同一硬盤上)。