Java IO流笔记4 --- File类
文章目錄
- 1 概述
- 2 獲取
- 2.1 獲取 File類 本身的屬性
- 2.2 獲取系統根目錄和容量
- 2.3 獲取指定目錄全部文件
- 3 創建與刪除
- 4 判斷
- 5 重命名
- 6 過濾器
1 概述
IO流,流對象,只能操作設備上的數據,其他的都操作不了。
文件夾,文件的屬性(文件的創建,修改,讀寫屬性,文件名等),這些需要用 File類來操作。
File類
用來將文件或者文件夾(目錄) 封裝成對象
文件一旦變為對象,可以先操作文件,再操作文件中的數據
方便對文件或者文件夾的屬性信息進行操作
File對象可以作為參數,傳遞給流的構造函數
文件一旦變為對象,可以先操作文件,再操作文件中的數據,可以將一個已存在的,或者不存在的 文件或者目錄 封裝成 File對象
幾個構造函數
File(String pathname)
通過 將給定路徑 名字字符串 轉換為抽象路徑名 來創建一個 新File實例
例:File f1 = new File("c:\\a.txt"); // 想把誰封裝成對象,把誰往里寫就可以了
File(String parent, String child) File(File parent, String child)
根據 parent路徑名 字符串 和 child路徑名 字符串,創建一個 新File實例
例:File f2 = new File("c:\\","a.txt");
File( URI uri )
通過 將給定的 file: URI 轉換為一個 抽象路徑名 來創建一個 新的File實例
File類的功能主要分為5種:獲取,創建與刪除,判斷,重命名,過濾器,下面分別講解
2 獲取
2.1 獲取 File類 本身的屬性
獲取 File類 本身的屬性,包括,獲取文件名稱,文件路徑,文件大小,文件修改時間等
File f = new File("G:\\test\\GestureTest\\a.txt"); String name = f.getName(); String absPath = f.getAbsolutePath(); // 絕對路徑 String path = f.getPath(); long len = f.length(); // 文件的大小 long time = f.lastModified(); // 文件上次的修改時間 // 打印出來的時間是 1336102144203 怎么把它變為有效的時間 Date date = new Date(time); // 先把時間封裝 // 把時間 格式化 DateFormat dateFormate = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG); String str_time = dateFormate.format(date); // 怎么判斷文件有沒有被改寫,判斷文件上次修改時間 // 單獨開辟一條線程,監控文件的修改時間,一旦文件修改,就重新讀取文件的內容System.out.println("parent:"+ f.getParent()); // getParent() 獲取父目錄 System.out.println("name:"+name); System.out.println("absPath:"+absPath); System.out.println("path:"+path); System.out.println("len:"+len); System.out.println("time:"+time);輸出結果
parent:G:\test\GestureTest name:a.txt absPath:G:\test\GestureTest\a.txt path:G:\test\GestureTest\a.txt len:35 time:15373221263012.2 獲取系統根目錄和容量
static File listRoots() 列出可用的文件系統根
private static void getListRoots() {File[] files = File.listRoots();for(File file:files){System.out.println(file); // 這個打印電腦根目錄 C:\ D:\ E:\ F:\ G:\}File file = new File("G:\\");System.out.println("getFreeSpace:"+file.getFreeSpace()); // 常用System.out.println("getTotalSpace:"+file.getTotalSpace());System.out.println("getUsableSpace:"+file.getUsableSpace()); }輸出結果:
C:\ D:\ E:\ F:\ G:\ getFreeSpace:32711270400 getTotalSpace:161060220928 getUsableSpace:327112704002.3 獲取指定目錄全部文件
如果現在給出了一個目錄,則可以直接列出目錄中的內容。列出的方法在File類中存在兩個:
- 以字符串數組的形式返回:public String[] list()
- 以File數組的形式返回:public File[] listFiles()
分別演示如下:
public String[] list() ,以字符串數組的形式返回,列出了全部的名字,包括文件夾得名字和文件的名字
輸出結果:
$RECYCLE.BIN a app cpcopy demo exerise JAVA Javaex JAVA視頻 jdk jing Jlex ... ...public File[] listFiles(),以File數組的形式返回,列出了全部路徑
private static void getlistFiles() {File f = new File("G:"+File.separator);File[] files = f.listFiles();for(File file:files){System.out.println(file);} }輸出結果:
G:\$RECYCLE.BIN G:\a G:\app G:\cpcopy G:\demo G:\exerise G:\JAVA ... ...3 創建與刪除
文件的創建與刪除,方法的返回類型是 boolean類型
// 文件的創建和刪除 File file = new File("file.txt"); // 和輸出流不一樣,如果文件不存在,則創建,如果文件存在,則不創建 boolean b = file.createNewFile(); System.out.println("b="+b); boolean b = file.delete(); System.out.println("b="+b);// 文件夾的創建與刪除 File dir = new File("abc\\q\\e\\c\\z\\r\\w\\y\\f\\e\\g\\s"); //創建多級目錄 boolean b = dir.mkdir();//make directory // 創建單級目錄 dir.mkdirs(); //創建多級目錄 System.out.println(dir.delete()); // 文件夾的刪除 System.out.println(dir.delete()); // 文件夾的刪除 說明: windows的刪除是從里往外刪的,如果文件夾里有內容,直接刪除,是刪不掉的 如果文件夾里沒有內容,直接刪可以刪掉對于多級目錄,使用 delete()方法,返回true,最里面的 s 被刪除掉如果文件正在被流所操作,同樣也是刪不掉4 判斷
我們若想操作一個文件,就要先判斷這個文件存不存在
File f = new File("a.txt"); boolean b = f.exists(); System.out.println("b="+b); // --- 判斷一個文件是否存在的代碼File f = new File("aaa"); f.mkdir(); // 執行完這句,建立一個名為 aaa.txt的文件夾File f = new File("aaa"); f.createNewFile(); // 建立一個文件aaa不一定是目錄,a.txt 也不一定是文件所以如果文件未知,在操作前,先判斷一下是否存在File f=new File("d:"+File.separator+"test.txt");if(f.exists()){// 進行操作}else{try {f.createNewFile(); // 不存在,就創建文件} catch (IOException e) {e.printStackTrace();}} }5 重命名
如果在同一個目錄下,是重命名,如果不在同一目錄下,是剪切
public static void renameToDemo() {File f1 = new File("c:\\9.mp3");File f2 = new File("d:\\aa.mp3");boolean b = f1.renameTo(f2);System.out.println("b="+b);}6 過濾器
常用方法
String[] list( FilenameFilter filter )
返回一個字符串數組,這些字符串指定此抽象路徑名表示的目錄中,滿足指定過濾器的文件和目錄
FilenameFilter --- 接口
原理
過濾器,第一步做的,還是先調用 list,把這個 list下,所有目錄都拿到,然后遍歷數組,只要符合自己創建的 FilenameFilter.accept(dir, name);,只要返回true,就把符合條件的 內容 往數組里存
代碼實例1
// 過濾器 --- 找發非隱藏文件 public class FilterByHidden implements FileFilter {public boolean accept(File pathname) {return !pathname.isHidden();} }private static void hiddenFile() {File f = new File("C:\\");File[] files = f.listFiles(new FilterByHidden());for(File file: files){System.out.println(file);}}輸出結果
C:\AppData C:\BluetoothExchangeFolder C:\dlcache C:\Documents and Settings C:\inetpub C:\Intel C:\MiFlashvcom.ini C:\PerfLogs C:\Program Files C:\Program Files (x86) C:\SWSETUP C:\unintall.log C:\Users C:\WiFi_Log.txt C:\Windows代碼實例2 專門用于過濾后綴名的過濾器
public class SuffixFilte implements FilenameFilter {private String suffix ; // 我要過濾什么,不知道,你傳什么,我過濾什么 public SuffixFilte(String suffix) {super();this.suffix = suffix;}public boolean accept(File dir, String name) {return name.endsWith(suffix);} }private static void txtFile() {File f = new File("C:\\");File[] files = f.listFiles(new SuffixFilte(".txt"));for(File file: files){System.out.println(file);}}輸出結果:
C:\WiFi_Log.txt總結
以上是生活随笔為你收集整理的Java IO流笔记4 --- File类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android resolvesize方
- 下一篇: Java基础学习总结