Java基础:IO流之File类
生活随笔
收集整理的這篇文章主要介紹了
Java基础:IO流之File类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. File類概述
文件和目錄路徑名的抽象表示形式,表示一個文件或文件夾,并提供了一系列操作文件或文件夾的方法
2. 構造方法
| File(String pathname) | 根據路徑得到File對象 |
| File(String parent,String child) | 根據目錄和子文件/目錄得到對象 |
| File(File parent,String child) | 根據父File對象和子文件/目錄得到對象 |
示例代碼
package cn.itcast_01; import java.io.File; /** 我們要想實現IO的操作,就必須知道硬盤上文件的表現形式。* 而Java就提供了一個類File供我們使用。* * File:文件和目錄(文件夾)路徑名的抽象表示形式* 構造方法:* File(String pathname):根據一個路徑得到File對象* File(String parent, String child):根據一個目錄和一個子文件/目錄得到File對象* File(File parent, String child):根據一個父File對象和一個子文件/目錄得到File對象*/ public class FileDemo {public static void main(String[] args) {// File(String pathname):根據一個路徑得到File對象// 把e:\\demo\\a.txt封裝成一個File對象File file = new File("E:\\demo\\a.txt");// File(String parent, String child):根據一個目錄和一個子文件/目錄得到File對象File file2 = new File("E:\\demo", "a.txt");// File(File parent, String child):根據一個父File對象和一個子文件/目錄得到File對象File file3 = new File("e:\\demo");File file4 = new File(file3, "a.txt");// 以上三種方式其實效果一樣} }3. 創建功能
| boolean | createNewFile() | 創建文件 |
| boolean | mkdir() | 創建文件夾 |
| boolean | mkdirs() | 創建多級文件夾,如果父級文件夾不存在,會自動創建 |
| File | createTempFile() | 創建一個用于緩存的臨時文件 |
代碼示例
package cn.itcast_02; import java.io.File; import java.io.IOException; /**創建功能:*public boolean createNewFile():創建文件 如果存在這樣的文件,就不創建了*public boolean mkdir():創建文件夾 如果存在這樣的文件夾,就不創建了*public boolean mkdirs():創建文件夾,如果父文件夾不存在,會幫你創建出來*/ public class FileDemo {public static void main(String[] args) throws IOException {// 需求:我要在e盤目錄下創建一個文件夾demoFile file = new File("e:\\demo");System.out.println("mkdir:" + file.mkdir());// 需求:我要在e盤目錄demo下創建一個文件a.txtFile file2 = new File("e:\\demo\\a.txt");System.out.println("createNewFile:" + file2.createNewFile());// 需求:我要在e盤目錄test下創建一個文件b.txt// Exception in thread "main" java.io.IOException: 系統找不到指定的路徑。// 注意:要想在某個目錄下創建內容,該目錄首先必須存在。// File file3 = new File("e:\\test\\b.txt");// System.out.println("createNewFile:" + file3.createNewFile());// 需求:我要在e盤目錄test下創建aaa目錄// File file4 = new File("e:\\test\\aaa");// System.out.println("mkdir:" + file4.mkdir());// File file5 = new File("e:\\test");// File file6 = new File("e:\\test\\aaa");// System.out.println("mkdir:" + file5.mkdir());// System.out.println("mkdir:" + file6.mkdir());// 其實我們有更簡單的方法File file7 = new File("e:\\aaa\\bbb\\ccc\\ddd");System.out.println("mkdirs:" + file7.mkdirs());// 看下面的這個東西:File file8 = new File("e:\\liuyi\\a.txt");System.out.println("mkdirs:" + file8.mkdirs());} }4. 刪除功能
| boolean | delete() | 刪除文件或文件夾 |
代碼示例
package cn.itcast_03; import java.io.File; import java.io.IOException; /** 刪除功能:public boolean delete()* * 注意:* A:如果你創建文件或者文件夾忘了寫盤符路徑,那么,默認在項目路徑下。* B:Java中的刪除不走回收站。* C:要刪除一個文件夾,請注意該文件夾內不能包含文件或者文件夾*/ public class FileDemo {public static void main(String[] args) throws IOException {// 創建文件// File file = new File("e:\\a.txt");// System.out.println("createNewFile:" + file.createNewFile());// 我不小心寫成這個樣子了File file = new File("a.txt");System.out.println("createNewFile:" + file.createNewFile());// 繼續玩幾個File file2 = new File("aaa\\bbb\\ccc");System.out.println("mkdirs:" + file2.mkdirs());// 刪除功能:我要刪除a.txt這個文件File file3 = new File("a.txt");System.out.println("delete:" + file3.delete());// 刪除功能:我要刪除ccc這個文件夾File file4 = new File("aaa\\bbb\\ccc");System.out.println("delete:" + file4.delete());// 刪除功能:我要刪除aaa文件夾// File file5 = new File("aaa");// System.out.println("delete:" + file5.delete());File file6 = new File("aaa\\bbb");File file7 = new File("aaa");System.out.println("delete:" + file6.delete());System.out.println("delete:" + file7.delete());} }5. 重命名功能
| renamneTo(File dest) | 路徑名相同就是重命名,不一樣就是改名加剪切 |
代碼示例
package cn.itcast_04; import java.io.File; /** 重命名功能:public boolean renameTo(File dest)* 如果路徑名相同,就是改名。* 如果路徑名不同,就是改名并剪切。* * 路徑以盤符開始:絕對路徑 c:\\a.txt* 路徑不以盤符開始:相對路徑 a.txt*/ public class FileDemo {public static void main(String[] args) {// 創建一個文件對象// File file = new File("林青霞.jpg");// // 需求:我要修改這個文件的名稱為"東方不敗.jpg"// File newFile = new File("東方不敗.jpg");// System.out.println("renameTo:" + file.renameTo(newFile));File file2 = new File("東方不敗.jpg");File newFile2 = new File("e:\\林青霞.jpg");System.out.println("renameTo:" + file2.renameTo(newFile2));} }6. 判斷功能
| isDirectory() | 判斷是否是目錄 |
| isFile() | 判斷是否是文件 |
| exists() | 判斷是否是存在 |
| canRead() | 判斷是否是可讀 |
| canWrite() | 判斷是否是可寫 |
| isHidden() | 判斷是否是隱藏 |
示例代碼
import java.io.File; /* * 判斷功能: * public boolean isDirectory():判斷是否是目錄 * public boolean isFile():判斷是否是文件 * public boolean exists():判斷是否存在 * public boolean canRead():判斷是否可讀 * public boolean canWrite():判斷是否可寫 * public boolean isHidden():判斷是否隱藏 */ public class FileDemo { public static void main(String[] args) { // 創建文件對象 File file = new File("a.txt"); System.out.println("isDirectory:" + file.isDirectory());// false System.out.println("isFile:" + file.isFile());// true System.out.println("exists:" + file.exists());// true System.out.println("canRead:" + file.canRead());// true System.out.println("canWrite:" + file.canWrite());// true System.out.println("isHidden:" + file.isHidden());// false } }7. 獲取功能
| String | getAbsolutePath() | 獲取絕對路徑 |
| String | getPath() | 獲取相對路徑 |
| String | getName() | 獲取名稱 |
| long | getFreeSpace() | 獲取剩余可用空間 |
| long | getTotalSpace() | 獲取總大小 |
| long | length() | 獲取長度,字節數 |
| long | lastModified() | 獲取最后一次修改時間,毫秒值 |
| String[] | list() | 獲取指定目錄下的所有文件或文件夾的名稱數組 |
| File[] | listFiles() | 獲取指定目錄下的所有文件或文件夾的File數組 |
代碼示例
package cn.itcast_06; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; /** 獲取功能:* public String getAbsolutePath():獲取絕對路徑* public String getPath():獲取相對路徑* public String getName():獲取名稱* public long length():獲取長度。字節數* public long lastModified():獲取最后一次的修改時間,毫秒值*/ public class FileDemo {public static void main(String[] args) {// 創建文件對象File file = new File("demo\\test.txt");System.out.println("getAbsolutePath:" + file.getAbsolutePath());System.out.println("getPath:" + file.getPath());System.out.println("getName:" + file.getName());System.out.println("length:" + file.length());System.out.println("lastModified:" + file.lastModified());// 1416471971031Date d = new Date(1416471971031L);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String s = sdf.format(d);System.out.println(s);} }運行結果:
8. 高級獲取功能
package cn.itcast_07; import java.io.File; /** 高級獲取功能:* public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數組* public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數組*/ public class FileDemo {public static void main(String[] args) {// 指定一個目錄File file = new File("e:\\");// public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數組String[] strArray = file.list();for (String s : strArray) {System.out.println(s);}System.out.println("------------");// public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數組File[] fileArray = file.listFiles();for (File f : fileArray) {System.out.println(f.getName());}} }運行結果:
9. 文件過濾器
| String[] | list(FilenameFilter filter) | 返回滿足條件的文件名數組 |
| File[] | listFiles(FilenameFilter filter) | 返回滿足條件的文件數組 |
10. File練習
文件名稱過濾器的實現思想及代碼
- public String[] list(FilenameFilter filter)
- public File[] listFiles(FilenameFilter filter)
10.1 文件名稱過濾器的實現
package cn.itcast_08; import java.io.File; import java.io.FilenameFilter; /** 判斷E盤目錄下是否有后綴名為.jpg的文件,如果有,就輸出此文件名稱* A:先獲取所有的,然后遍歷的時候,依次判斷,如果滿足條件就輸出。* B:獲取的時候就已經是滿足條件的了,然后輸出即可。* * 要想實現這個效果,就必須學習一個接口:文件名稱過濾器* public String[] list(FilenameFilter filter)* public File[] listFiles(FilenameFilter filter)*/ public class FileDemo2 {public static void main(String[] args) {// 封裝e判斷目錄File file = new File("e:\\");// 獲取該目錄下所有文件或者文件夾的String數組// public String[] list(FilenameFilter filter)String[] strArray = file.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {// return false;// return true;// 通過這個測試,我們就知道了,到底把這個文件或者文件夾的名稱加不加到數組中,取決于這里的返回值是true還是false// 所以,這個的true或者false應該是我們通過某種判斷得到的// System.out.println(dir + "---" + name);// File file = new File(dir, name);// // System.out.println(file);// boolean flag = file.isFile();// boolean flag2 = name.endsWith(".jpg");// return flag && flag2;return new File(dir, name).isFile() && name.endsWith(".jpg");}});// 遍歷for (String s : strArray) {System.out.println(s);}} }10.2 遞歸遍歷目錄下指定后綴名結尾的文件名稱
package cn.itcast_03; import java.io.File; /** 需求:把E:\JavaSE目錄下所有的java結尾的文件的絕對路徑給輸出在控制臺。* * 分析:* A:封裝目錄* B:獲取該目錄下所有的文件或者文件夾的File數組* C:遍歷該File數組,得到每一個File對象* D:判斷該File對象是否是文件夾* 是:回到B* 否:繼續判斷是否以.java結尾* 是:就輸出該文件的絕對路徑* 否:不搭理它*/ public class FilePathDemo {public static void main(String[] args) {// 封裝目錄File srcFolder = new File("E:\\JavaSE");// 遞歸功能實現getAllJavaFilePaths(srcFolder);}private static void getAllJavaFilePaths(File srcFolder) {// 獲取該目錄下所有的文件或者文件夾的File數組File[] fileArray = srcFolder.listFiles();// 遍歷該File數組,得到每一個File對象for (File file : fileArray) {// 判斷該File對象是否是文件夾if (file.isDirectory()) {getAllJavaFilePaths(file);} else {// 繼續判斷是否以.java結尾if (file.getName().endsWith(".java")) {// 就輸出該文件的絕對路徑System.out.println(file.getAbsolutePath());}}}} }運行結果:
10.3 遞歸刪除帶內容的目錄
package cn.itcast_03; import java.io.File; /** 需求:遞歸刪除帶內容的目錄* * 分析:* A:封裝目錄* B:獲取該目錄下的所有文件或者文件夾的File數組* C:遍歷該File數組,得到每一個File對象* D:判斷該File對象是否是文件夾* 是:回到B* 否:就刪除*/ public class FileDeleteDemo {public static void main(String[] args) {// 封裝目錄File srcFolder = new File("demo");// 遞歸實現deleteFolder(srcFolder);}private static void deleteFolder(File srcFolder) {// 獲取該目錄下的所有文件或者文件夾的File數組File[] fileArray = srcFolder.listFiles();if (fileArray != null) {// 遍歷該File數組,得到每一個File對象for (File file : fileArray) {// 判斷該File對象是否是文件夾if (file.isDirectory()) {deleteFolder(file);} else {System.out.println(file.getName() + "---" + file.delete());}}System.out.println(srcFolder.getName() + "---" + srcFolder.delete());}} }運行結果:
總結
以上是生活随笔為你收集整理的Java基础:IO流之File类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java.lang.IllegalArg
- 下一篇: Java字符串格式化