個人理解:
File是個文件類,可以用其增加、刪除、查找某種類型的文件或者文件夾,同時根據其成員變量的特點可以綜合利用,避免出現跨系統的時候出現錯誤,並且查找時最好輸入絕對路徑,以免出現不存在的文件。使用遞歸時一定要主要好停止,以免棧內存溢出。
一、簡述IO操作:
當需要把內存中的數據存儲到持久化設備上的這個動作稱為輸出(寫)output操作;
當把持久設備上的數據讀取到內存中的這個動作稱為輸入(讀)input操作。
這個輸入和輸出的動作稱為IO操作。
二、File類:
1、文件類:
成員變量:
import java.io.File; public class Demo01 { public static void main(String[] args) { //File類 //文件:File //目錄(文件夾):directory //路徑:path //路徑分隔符(與系統有關的)<windows里面是 ; linux里面是 : > System.out.println(File.pathSeparator); // ; //與系統有關的路徑名稱分隔符<windows里面是 \ linux里面是/ > System.out.println(File.separator); // \ } }
2、構造函數:
import java.io.File; public class Demo02 { public static void main(String[] args) { File file=new File("D:\\java\\b.txt"); //雙\\是轉義 System.out.println(file); File file2=new File("D:\\java","a.txt");//父路徑、子路徑--可以適用於多個文件的! System.out.println(file2); File parent=new File("D:\\java"); File file3=new File(parent,"a.txt");//File類的父路徑、子路徑 System.out.println(file3); } }
3、File類的獲取及文件的創建和刪除、判斷:
import java.io.File; import java.io.IOException; public class Demo03 { public static void main(String[] args) throws IOException { method06(); } public static void method01(){ File file=new File("D:\\java\\a.txt"); //獲取文件對象的絕對路徑 System.out.println(file.getAbsolutePath()); File file0=new File("src");//寫相對路徑的話,會自動轉成絕對路徑,但是不去檢驗文件是否真實存在(只會給翻譯回來,可能根本不存在) D:\JAVA0322\Day16\src //獲取文件對象的絕對路徑 System.out.println(file0.getAbsolutePath()); File file00=new File("aa");//這個根本不存在 D:\JAVA0322\Day16\aa //獲取文件對象的絕對路徑 System.out.println(file00.getAbsolutePath()); //獲取文件對象的文件名或者目錄名 System.out.println(file.getName()); //獲取文件對象的路徑所對應的字符串 類似於toString()方法 System.out.println(file.getPath()); //獲取文件的大小(字節---Long類型) System.out.println(file.length()); } //文件創建和刪除 public static void method02() throws IOException{ File file=new File("D:\\java\\d"); //創建文件 boolean flag=file.createNewFile();//都是創建的文件(最好都是加上后綴的),不能是文件夾 System.out.println(flag); } //文件刪除 public static void method03(){ File file=new File("D:\\java\\d"); //刪除文件(找不回來了) boolean flag=file.delete(); System.out.println(flag); } //文件判斷 public static void method04(){ File file=new File("D:\\java\\a.txt"); //判斷該文件對象所對應的文件是否存在 System.out.println(file.exists()); //判斷該文件對象是否是文件夾 System.out.println(file.isDirectory()); //判斷該文件對象是否是文件 System.out.println(file.isFile()); } //創建文件夾 public static void method05(){ File file=new File("D:\\java\\d.txt");//windows系統內文件夾名字不區分大小寫,最后這個是文件夾的名字 boolean flag=file.mkdir(); System.out.println(flag); } //創建文件夾 public static void method06(){ File file=new File("D:\\java\\d\\a\\b");//mkdirs()用於創建多級目錄,經常用的方法,不加s不能創建多級目錄 boolean flag=file.mkdirs(); System.out.println(flag); } }
4、listFiles()方法介紹
import java.io.File; public class Demo04 { public static void main(String[] args) { method03(); } public static void method01(){ File file=new File("D:\\java"); //獲取該路徑下的文件和文件夾 String[] arr=file.list(); //遍歷 for(String s:arr){ System.out.println(s);//返回文件的全部的名字 } } public static void method02(){ File file=new File("D:\\java"); //獲取該路徑下的文件和文件夾所對應的文件對象 File[] files=file.listFiles(); for(File f:files){ System.out.println(f);//獲得的其絕對路徑---根本方法 } } }
需要注意的是:
①、指定的目錄也就是文件夾必須存在;
②、指定的必須是目錄。否則會空指針。
4、文件過濾器:
FileFilter 與FilenameFilter都是接口:
public static void method03(){ File file=new File("D:\\java"); //獲取該路徑下的文件和文件夾所對應(括號內為條件,也就是某個類型)的文件對象 File[] files=file.listFiles(new MyFileFilter()); for(File f:files){ System.out.println(f);//獲得的其絕對路徑---根本方法 } }
import java.io.File; import java.io.FileFilter; //過濾器: public class MyFileFilter implements FileFilter{ public boolean accept(File pathname) { /*//獲取文件名 String filename=pathname.getName(); //判斷文件名是否以.txt結尾 boolean flag=filename.endsWith(".txt"); return flag; */ return pathname.getName().endsWith(".txt"); } }
三、遞歸:
在當前方法內調用自己的現象
//遞歸 public class Demo01 { public static void main(String[] args) { int sum=get(100); System.out.println(sum); } //用遞歸計算1-100的和 public static int get( int num){ if(num==1){ return 1; } return num +get(num-1); } }
import java.io.File; public class Demo02 { public static void main(String[] args) { File file=new File("D:\\java"); look(file); } public static void look(File file){ //獲取該路徑下所有的文件夾和文件 File[] files=file.listFiles(new MyFilter());//獲得.txt文件和文件夾 //遍歷 for(File f:files){ //如果是文件夾則繼續尋找 if(f.isDirectory()){ look(f); }else{//如果不是則打印 System.out.println(f); } } } }
import java.io.File; import java.io.FileFilter; public class MyFilter implements FileFilter { public boolean accept(File pathname) { //獲取以.txt為后綴的文件 //如果是文件夾,那么放到File[]數組內 if(pathname.isDirectory()){ return true; } return pathname.getName().endsWith(".JaVa"); } }
需要注意的是:
1、要保證遞歸能夠停下來;
2、遞歸次數不能太多;
3、構造方法不能遞歸使用。