1. 程式人生 > >Java——File類,遞歸

Java——File類,遞歸

.exe cheng accep accept 絕對路徑 pos absolut 對象傳遞 exce

一、File類

獲取路徑或目錄分隔符

public static void main(String[] args) {
	//File類靜態成員變量
	//與系統有關的路徑分隔符
	String separator = File.pathSeparator;
	System.out.println(separator);// 是一個分號,目錄的分割   Linux :
	
	//與系統有關的默認名稱分隔符
	separator = File.separator;
	System.out.println(separator);// 向右 \  目錄名稱分割  Linux / 
}

1、3種構造方式

/*
 *  File(File parent,String child)
 *  傳遞路徑,傳遞File類型父路徑,字符串子路徑
 *  好處: 父路徑是File類型,父路徑可以直接調用File類方法
 */
public static void function_2(){
	File parent = new File("d:");
	File file = new File(parent,"eclipse");
	System.out.println(file);
}

/*
 *  File(String parent,String child)
 *  傳遞路徑,傳遞字符串父路徑,字符串子路徑
 *  好處: 單獨操作父路徑和子路徑
 */
public static void function_1(){
	File file = new File("d:","eclipse");
	System.out.println(file);
}

/*
 *  File(String pathname)
 *  傳遞路徑名: 可以寫到文件夾,可以寫到一個文件
 *  c:\\abc   c:\\abc\\Demo.java
 *  將路徑封裝File類型對象
 */
public static void function(){
	File file = new File("d:\\eclipse");
	System.out.println(file);
}

2、創建文件

/*
 *  File創建文件的功能
 *  boolean createNewFile()
 *  創建的文件路徑和文件名,在File構造方法中給出
 *  文件已經存在了,不再創建,返回值為false
 */
public static void function()throws IOException{
	File file = new File("c:\\a.txt");
	boolean b = file.createNewFile();
	System.out.println(b);
}

3、創建文件夾

/*
 *  File創建文件夾功能
 *  boolean mkdirs() 創建多層文件夾
 *  創建的路徑也在File構造方法中給出
 *  文件夾已經存在了,不再創建,返回值為false
 */
public static void function_1(){
	File file = new File("c:\\abc");
	boolean b = file.mkdirs();
	System.out.println(b);
}

4、刪除文件和文件夾

/*
 *  File類的刪除功能
 *  boolean delete()
 *  刪除的文件或者是文件夾,在File構造方法中給出
 *  刪除成功返回true,刪除失敗返回false
 *  刪除方法,不走回收站,直接從硬盤中刪除
 *  刪除有風險,運行需謹慎
 */
public static void function_2(){
	File file = new File("c:\\a.txt");
	boolean b = file.delete();
	System.out.println(b);
}

5、獲取文件或文件夾的名字

/*
 *  File類的獲取功能
 *  String getName()
 *  返回路徑中表示的文件或者文件夾名
 *  獲取路徑中的最後部分的名字
 */
public static void function(){
	File file = new File("d:\\eclipse\\eclipse.exe");
	String name = file.getName();
	System.out.println(name);
}

6、獲取文件中的字節數

/*
 * File類獲取功能
 * long length()
 * 返回路徑中表示的文件的字節數
 */
public static void function_1(){
	File file = new File("d:\\eclipse\\eclipse.exe");
	long length = file.length();
	System.out.println(length);
}

7、獲取絕對路徑

/*
 * File類獲取功能
 * String getAbsolutePath() 返回String對象
 * File   getAbsoluteFile() 返回File對象
 */
public static void function_2(){
	File file = new File("src");
	File absolute = file.getAbsoluteFile();
	System.out.println(absolute);
}

8、獲取父路徑

/*
 * File類的獲取功能
 * String getParent() 返回String對象
 * File getParentFile()返回File對象
 * 獲取父路徑
 */
public static void function_3(){
	File file = new File("d:\\eclipse\\eclipse.exe");
	File parent = file.getParentFile();
	System.out.println(parent);
}

9、判斷路徑是否存在

/*
 *  File判斷功能
 *  boolean exists()
 *  判斷File構造方法中封裝路徑是否存在
 *  存在返回true,不存在返回false
 */
public static void function(){
	File file = new File("src");
	boolean b = file.exists();
	System.out.println(b);
}

10、判斷是否為文件/文件夾

/*
 *  File判斷功能
 *  boolean isDirectory()
 *  判斷File構造方法中封裝的路徑是不是文件夾
 *  如果是文件夾,返回true,不是文件返回false
 *  
 *  boolean isFile()
 *  判斷File構造方法中封裝的路徑是不是文件
 */
public static void function_1(){
	File file = new File("d:\\eclipse\\eclipse.exe");
	if(file.exists()){
		boolean b = file.isDirectory();
		System.out.println(b);
	}
}

11、遍歷目錄下所有文件

/*
 *  File類的獲取功能
 *  File[] listFiles()
 *  獲取到,File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄)
 *  返回的是目錄或者文件的全路徑
 */
public static void function_1(){
	File file = new File("d:\\eclipse");
	File[] fileArr = file.listFiles();
	for(File f : fileArr){
		System.out.println(f);
	}
}

/*
 *  File類的獲取功能
 *  String[] list()
 *  獲取到,File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄)
 *  返回只有名字
 */
public static void function(){
	File file = new File("c:");
	String[] strArr = file.list();
	System.out.println(strArr.length);
	for(String str : strArr){
		System.out.println(str);
	}
}

12、文件過濾器

需要我們自己寫一個過濾器

import java.io.File;
import java.io.FileFilter;

/*
 *  自定義過濾器
 *  實現FileFilter接口,重寫抽象方法
 */
public class MyFilter implements FileFilter{
	public boolean accept(File pathname)  {
		/*
		 * pathname 接受到的也是文件的全路徑
		 * c:\\demo\\1.txt
		 * 對路徑進行判斷,如果是java文件,返回true,不是java文件,返回false
		 * 文件的後綴結尾是.java
		 */
		//String name = pathname.getName();
		return pathname.getName().endsWith(".java");
		
	}
}

然後在listfiles中添加它的匿名對象

import java.io.File;

/*
 *  File類的獲取,文件獲取過濾器
 *  遍歷目錄的時候,可以根據需要,只獲取滿足條件的文件
 *  遍歷目錄方法 listFiles()重載形式
 *  listFiles(FileFilter filter)接口類型
 *  傳遞FileFilter接口的實現類
 *  自定義FileFilter接口實現類,重寫抽象方法,
 *  接口實現類對象傳遞到遍歷方法listFiles
 */
public class FileDemo1 {
	public static void main(String[] args) {
		File file = new File("c:\\demo");
		File[] fileArr = file.listFiles(new MyFilter());
		for(File f : fileArr){
			System.out.println(f);
		}
	}
}

二、遞歸

示例:

/*
 *  方法的遞歸調用
 *    方法自己調用自己
 *  適合於,方法中運算的主體不變,但是運行的時候,參與運行的方法參數會變化
 *  註意:
 *     遞歸一定要有出口, 必須可以讓程序停下
 *     遞歸次數不能過多
 *     構造方法,禁止遞歸
 */
public class DiGuiDemo {
	public static void main(String[] args) {
		/*int sum = getSum(3);
		System.out.println(sum);*/
		System.out.println(getJieCheng(5));
		System.out.println(getFBNQ(12));
	}
	/*
	 *  方法遞歸,計算斐波那契數列
	 *  
	 */
	public static int getFBNQ(int month){
		if( month == 1)
			return 1;
		if( month == 2)
			return 1;
		return getFBNQ(month-1)+getFBNQ(month-2);
	}
	
	/* 
	 *  計算階乘 5!
	 *   5*4*3*2*1
	 */
	public static int getJieCheng(int n){
		if ( n == 1)
			return 1;
		return n * getJieCheng(n-1);
	}
			
	/*
	 *  計算 1+2+3+100和 = 5050
	 *  計算規律:
	 *    n+(n-1)+(n-2)
	 *    100+(100-1)+(99-1)+...1
	 */
	public static int getSum(int n){
		if( n == 1)
			return 1;
		return n + getSum(n-1);
	}
	
}

如果我們想遍歷目錄下所有的文件,就可以用這種方法

/*
 *  定義方法,實現目錄的全遍歷
 */
public static void getAllDir(File dir){
	System.out.println(dir);
	//調用方法listFiles()對目錄,dir進行遍歷
	File[] fileArr = dir.listFiles();
	for(File f : fileArr){
		//判斷變量f表示的路徑是不是文件夾
		if(f.isDirectory()){
			//是一個目錄,就要去遍歷這個目錄
			//本方法,getAllDir,就是給個目錄去遍歷
			//繼續調用getAllDir,傳遞他目錄
			getAllDir(f);
		}else{
			System.out.println(f);
		}
	}
}

Java——File類,遞歸