File類和遞歸

一.File類

在這裏插入圖片描述
一. File類的創建
1.File類定義:
java.io.File 類是文件和目錄路徑名的抽象表示,主要用於文件和目錄的創建、查找和刪除等操作。
2.用構造方法創建File類
1).public File(String pathname) //通過將給定的路徑名字符串轉換爲抽象路徑名來創建新的 File實例。

  eg:
   String pathname="D:\\aa.txt";//定義一個路徑
	File file1=new File(pathname); 
	System.out.println(file1);

2).public File(String parent, String child) //從父路徑名字符串和子路徑名字符串創建新的 File實例。

  eg:
   String parent="d:\\aaa";//定義父路徑
	String child="bbb.txt";//定義子路徑
	File file=new File(parent,child);

3).public File(File parent, String child) //從父抽象路徑名和子路徑名字符串創建新的 File實例。

   eg:
    File parentDir=new File("d:\\aaa");
	String child1="bbb.txt";
	File files=new File(parentDir,child);

3.創建文件或目錄
1)文件的創建
public boolean createNewFile() //當且僅當具有該名稱的文件尚不存在時,創建一個新的空文件。
2)目錄的創建
(1)創建單級目錄:public boolean mkdir() //創建由此File表示的目錄,包括任何必需但不存在的父目錄。
(2)創建多級目錄:public boolean mkdirs()

PS:
1.一個File對象代表硬盤中實際存在的一個文件或者目錄。
2.無論該路徑下是否存在文件或者目錄,都不影響File對象的創建。
3.因爲創建File時不知道是創建的文件還是目錄,所以需要有特定方法進行判斷。
4.關於分隔符:
1)路徑分隔符windows;linux
2)文件名稱分隔符window :反斜槓\ Linux: /正斜槓
正斜槓可以一個,反斜槓必須兩個。

二.絕對路徑和相對路徑
1.絕對路徑:從盤符開始的路徑,這是一個完整的路徑。

eg:
    File f=new File("D:\\aaa.java");//D盤下bbb.java-->絕對路徑
	System.out.println(f.getAbsolutePath());//輸出結果D:\aaa.java

2.相對路徑:相對於項目目錄的路徑,這是一個便捷的路徑,開發中經常使用。

eg:
     File f2=new File("aaa.java");//項目下bbb.java-->相對路徑
	System.out.println(f2.getAbsolutePath());
	//輸出結果C:\Users\pc\eclipse-workspace\RemoteSystemsTempFiles\FileDemo01\aaa.java

三.File類常用方法
1.基本方法:
1) public String getAbsolutePath() //返回此File的絕對路徑名字符串。
2) public String getPath() //將此File轉換爲路徑名字符串。
3) public String getName() //返回由此File表示的文件或目錄的名稱。
4) public long length() //返回由此File表示的文件的長度。
5) public boolean delete() //刪除由此File表示的文件或目錄。
PS: API中說明: delete方法,如果此File表示目錄,則目錄必須爲空才能刪除。
2.判斷功能的方法
1) public boolean exists() //此File表示的文件或目錄是否實際存在。
2) public boolean isDirectory() //此File表示的是否爲目錄。
3) public boolean isFile() //此File表示的是否爲文件。
四.遍歷目錄下的文件
1. public String[] list() //返回一個String數組,表示該File目錄中的所有子文件或目錄。

 eg:
   File dir=new File("d:\\Java_Code");
	String[] names=dir.list();
	for(String name:names) {
		System.out.println(name);//輸出文件或子文件名字
	}
  1. public File[] listFiles() //返回一個File數組,表示該File目錄中的所有的子文件或目錄。

    eg:
     File[] files=dir.listFiles();
     for (File file : files) {
    	 System.out.println(file);//輸出文件或子文件具體路徑
     }
    

二.遞歸

在這裏插入圖片描述
一.遞歸
1.遞歸概念:指在當前方法中調用自己的現象。
2.遞歸分類:
1) 直接遞歸即爲方法自身調用自己。
2) 間接遞歸可以理解爲A方法調用B方法,B方法調用C方法,C方法調用A方法。
二.遞歸使用注意事項
1. 遞歸一定要有條件限定,保證遞歸能夠停止下來,否則會發生棧內存溢出。
2.在遞歸中雖然有限定條件,但是遞歸次數不能太多。否則也會發生棧內存溢出。
3.構造方法,禁止遞歸
三.遞歸經典實例
1.累加求和
即求n+(n-1)+…+1

   public class Demo01{
	   private static int sum(int n) {
			if(n==1) {
				return 1;
			}
		return n+sum(n-1);
	   }
	    public static void main(String[] args) {
			int s=sum(5);//求1~5之和
			System.out.println(s);
	    }
   }

2.遞歸求階乘
即求n*(n-1)*…*1

    public class Demo02 {
	//遞歸算法求階乘
		 private static int getValue(int n) {
			 if(n==1) {
				return 1;
			 }
			return n*getValue(n-1);
		}
		public static void main(String[] args) {
				int s=getValue(10);
				System.out.println(s);
	   	}
     }

3.遞歸打印多級目錄
遞歸打印多級目錄,即爲遍歷多級目錄,目錄的嵌套,打印輸出

import java.io.File;
import java.nio.file.Files;

public class demo03 {
	
	private static void printDir(File dir) {
		File[] files=dir.listFiles();
		//判斷:當是文件,打印絕對路徑
		//    當是目錄時,打印目錄,繼續調用打印目錄形成遞歸
		for (File file : files) {
			//是文件時
			if(file.isFile()) {
				System.out.println("文件名"+file.getAbsolutePath());
			}else {
				//是目錄,輸出目錄絕對路徑
				System.out.println("目錄"+file.getAbsolutePath());
				//繼續遍歷,調用printDir,形成遞歸
				printDir(file);
			}
		 }
       }

		public static void main(String[] args) {
			File dir=new File("D:\\aaa");
			printDir(dir);
		 }
    }

四.遞歸與File類綜合實例
文件搜索 ----》搜索D:\aaa目錄中.java文件
1) 常規方法:

 import java.io.File;

 public class Demo04{

	public static void main(String[] args) {
		File file=new File("D:\\aaa");
		printDir(file);
	}
	private static void printDir(File dir) {
		File[] files=dir.listFiles();
		//循環打印
		for (File file : files) {
			if(file.isFile()) {
				//File是文件,判斷文件名並輸出文件絕對路徑
				if(file.getName().endsWith(".java")) {
					//prefix(前綴)+.suffix(後綴) 
					System.out.println("文件名"+file.getAbsolutePath());
				}
				
			}else {
				//File是目錄,繼續遍歷,形成遞歸
				printDir(file);
			}
		}	
	}
 }

2)文件過濾器優化FileFilter

import java.io.File;

import javax.swing.filechooser.FileFilter;

public class Demo06DiGui2 {

	public static void main(String[] args) {
		File file=new File("D:\\aaa");
		printDir(file);

	}
	private static void printDir(File dir) {
	   //FileFilter過濾器優化及Lambda表達式優化
		File[] files=dir.listFiles(new FileFilter(){
			@Override
			public boolean accept(File pathname) {				
				return pathname.getName().endsWith(".java");
			}
		});
		//lambda優化   ()(參數)->{業務實現}
		//有參有返回值lambda表達式
		File[] files=dir.listFiles(f->{return f.getName().endsWith(".java")||f.isFile();});
		//循環打印
		for (File file : files) {
			if(file.isFile()) {
				//是文件,判斷文件名並輸出文件絕對路徑
				if(file.getName().endsWith(".java")) {
					System.out.println("文件名"+file.getAbsolutePath());
				}
			}else {
				//是目錄,繼續遍歷,形成遞歸
				printDir(file);
			}
		}	
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章