黑馬程式設計師-File類檔案操作,知識梳理與簡單應用
阿新 • • 發佈:2019-02-19
-------------------------------------Android培訓 java培訓 期待與您的交流!------------------------------------------
/* 檔案類的初始化,此時並不是真實存在於實體地址-----抽象的 1.建立 boolean creatrNewFile():在指定位置建立檔案,如果該檔案已經存在,則不建立,返回false。 和輸出流不一樣,輸出流物件已建立建立檔案。如果檔案已經存在,會覆蓋。 boolean mkdir():建立資料夾,最多建立一個子目錄 boolean mkdir():可以建立多級一個資料夾 2.刪除 boolean delete():刪除失敗返回false;如果因異常而結束的程式可能會報錯 void deleteOnExit();在程式退出時刪除指定檔案。(包括異常退出程式) 3.判斷 boolean exists():檔案是否存在,首要判斷 boolean isFile():是否檔案 boolean isDirectory():是否是目錄。 boolean isHidden();是否是隱藏檔案 boolean isAbsolute():是否是絕對路徑 4.獲取資訊 getName(); getPath(); 封裝什麼就獲取什麼路徑 getParent();該方法返回的是絕對路徑中的檔案父目錄。如果獲取的是相對 路徑的話,返回null; 如果相對路徑中有上一層目錄,該目錄就是其返回結果。 getAbsolutePath() 獲取絕對路徑 long lastNodified() 返回最後一次修改檔案的時間 long length() 返回long的檔案大小 */ import java.io.*; class FileDemo20_1 { public static void main(String[] args) throws IOException { method_1(); } public static void Method_1() throws IOException { File file =new File("dwa.txt"); sop("建立"+file.createNewFile()); sop("刪除"+file.delete()); } //File封裝的物理上事實上並不存在的 public static void consMethod() { File f1=new File("dwa.txt"); //將檔案作為引數封裝成物件 File f2=new File("f:\\se","dwa.txt"); //當目錄和檔案分別對應兩個引數封裝成引數 File dir=new File("f:\\se"); //將目錄封裝為File物件 File f3=new File(dir,"dwa.txt"); //將File物件作為引數 sop("f1="+f1); sop("f2="+f2); sop("f3="+f3); } public static void sop(Object o) { System.out.println(o); } } /* list() //呼叫list方法的file物件必須是封裝了一個目錄。該目錄還必須存在。 返回當前目錄的所有資料夾,所有檔案(包括隱藏檔案) listRoots() //返回系統所有的磁碟。 需求: 根據list()的過載方法返回當前目錄下的所有後綴為.java的檔案 */ import java.io.*; class FileDemo20_5 { public static void main(String[] args) { listDemo(); } //返回你所需要的檔案型別 public static void listDemo() { File dir=new File("f:\\"); String [] names=dir.list(new FilenameFilter() { public boolean accept(File dir,String name) //內部介面類 { return name.endsWith(".java"); //在指定搜尋字尾名為java的檔案 } }); System.out.println(names.length); for (String name:names) { System.out.println("name="+name); } } } /* 利用遞迴遍歷 列出指定目錄下檔案或者資料夾,包含子目錄中的內容,最後全部都是檔案為止 並將其改進成類似檔案系統的搜尋功能的類 遞迴的注意事項: 1.限定遞迴的結束條件 2.要主要遞迴的次數,儘量避免記憶體溢位 思路: 1.利用轉換流從鍵盤輸出要搜尋的檔名, 2.利用遞迴判斷 2.1如果還是資料夾,就繼續遞迴。 2.2如果是檔案,就返回上一級目錄,與該檔案同一目錄下的過濾。 2.3如果啟動了判斷程式,則結果當前的一次迴圈,因為當前目錄已經被遍歷了,避免其他檔案返回上一級又遍歷一次 */ import java.io.*; class FileDemo20_7 { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String fileName=br.readLine(); //輸入你要查詢的檔名字 File dir=new File("F:\\"); //搜尋的盤 dirList(dir,fileName); } public static void dirList(File dir,String s) { File [] llist=dir.listFiles(); //將dir目錄下的所有檔案放入陣列llist中 for (File i: llist) // { if (i.isDirectory()) //判斷是否是目錄 { dirList(i,s); //如果是則迴歸 }else { File [] suosou=i.getParentFile().listFiles(new FilenameFilter() { public boolean accept(File dir,String name) { return name.endsWith(s); } });//內部介面類過濾方法 for (File j:suosou) System.out.println(j); break; //因為當前目錄已經被遍歷了,避免其他檔案返回上一級又遍歷一次 } } } } /* 刪除一個帶內容的目錄。 刪除原理: 在window中,刪除目錄從裡面往外刪除的。 既然是從裡往外刪除,就需要用到遞迴。 java刪除是不走回收站的!,刪除需要謹慎 */ import java.io.*; class RemoveDir { public static void main(String[] args) { File dir=new File("f:\\Testdir"); removeDir(dir); } public static void removeDir(File dir) { File[] files=dir.listFiles(); for (File file:files ) { if (!file.isHidden()&&file.isDirectory()) //不能刪除具有隱藏檔案的資料夾 { removeDir(file); }else { System.out.println(file.toString()+"--"+file.delete()); } } System.out.println(dir.toString()+"||"+dir.delete()); //當資料夾裡面的所有檔案都刪除後,則可以刪除這個資料夾 } } /* 練習 將一個指定目錄下相同檔案的絕對路徑,儲存到一個文字檔案中。 建立一個java檔案列表檔案。 思路: 1.對指定的目錄進行遞迴。 2.獲取遞迴過程所有後綴.java檔案的物件。 3.將這些檔案物件儲存到集合中。 4.將集合中資料的絕對路徑寫到一個檔案中 */ import java.io.*; import java.util.*; class JavaFileList { public static void main(String[] args) { File dir=new File("F:\\SE"); List<File> list=new ArrayList(); //建立ArrayList集合物件 javaList(dir,list); File file=new File(dir,"java.txt"); writeToTxt(list,file.toString()); } public static void javaList(File dir,List<File> list) { File[] files=dir.listFiles(); for (File file:files) { //仍然有遍歷目錄的影子 if(file.isDirectory()){ javaList(file,list); }else{ if(file.getName().endsWith(".java")) //如果是java檔案就新增到集合去 list.add(file); } } } public static void writeToTxt(List<File> list,String Filename) { BufferedWriter bfw=null; //通過字元流對集合進行操作並將結果寫入文字中 try { bfw=new BufferedWriter(new FileWriter(Filename)); for (File file:list ) { bfw.write(file.getAbsolutePath()); //獲取絕對路徑 bfw.newLine(); bfw.flush(); } } catch (IOException e) { throw new RuntimeException("失敗"); //出錯則結束當前程式 }finally{ try { if(bfw!=null) bfw.close(); //寫入成功後,要關閉流物件 } catch (IOException e) { System.out.println(e); } } } }