javaFile類理解,案例:遍歷某目錄中的文件,並打印出文件的絕對路徑



從今天開始,我要將自己所學所想,參考API,將以講義的形式,列出自己覺得重要的東西,加深印象!

-------------------------------------------------這是廢話與正文的分割線----------------------------------------------------------------------------------------------------

File類,在java.io包中,在java語言中,它既可以表示文件,又可以表示目錄。(正文中我直接稱爲文件,按照理解的來就好)

它主要的構造方法有:

1.new File(File parent,String child); //根據parent目錄的全路徑名(即parent.getAbsoultPath()),和child的文件名組成一個新的file

2.new File(String parent,String child);//和1的構造方法很類似 parent就是child文件的上一級目錄·

3.new File(String pathName);//根據pathName(全路徑名或相對路徑名),去構造出新的file

4.new File(URI uri);//URI轉爲抽象的路徑名,構建出一個新的file對象

這裏我只總結常用的方法:

1.mkdir();//創建單級目錄,如果是多級目錄,則創建不成功,如:pathName = "D:/a/d"; 在D盤中沒有a,b目錄,這個就會創建失敗,這就需要用到mkdirs();

    需要補充一點的就是,有沒有發現我的pathName中路徑用的是正斜槓,而我們所看到的路徑都是反斜槓的,原因是在java中'\'是轉義字符,有特殊的功能

    爲了避免衝突,也可以寫成pathName = "D:\\a\\d"; 因爲"\\" 在java中輸出的是'\';

2.mkdirs();可創建多級目錄(包括單級),所以推舉按使用。

3.isFile()與isDirectory()用來判斷是否是文件|是否是文件夾,返回值爲boolean值,在系統中,如果不是文件就是文件夾,所以這兩個方法用一個接好了

4.getpath()文件的相對路徑,相對顧名思義,它相對的是project項目程序來說的,如果在工程目錄下,則輸出文件名既可以了,如果在項目文件夾外,則輸出的就是全路徑,

和getAbsoultPath()一致了。

5.getAbsoultPath()文件的絕對路徑,即文件的全路徑

6.length()文件長度,即文件大小(字節)

7.getTotalSpace();獲得分區的總大小,如這文件在D盤,則該函數返回的就是D盤的總大小

8.getUsableSpace;獲得分區可用空間大小

9.list()返回String[]數組,該路徑下所有文件與目錄名。

10.listFiles():返回File[]數組,該路徑下所有目錄和文件的對象

11.listRoots();返回分區File[]對象,如你電腦裏C:;D:;E:

File類主要理解記住這些方法基本上就可以了,如果有不懂可以再查看API就ok了!我們下面來用File類裏面的方法去遍歷某目錄中的文件,

思路:

1.判斷是文件還是目錄,如果是文件,則打贏出absoultPath;

2.是目錄則用遞歸,繼續判斷處理

不多說看代碼與註釋,理論再多還是得實踐!

import java.io.File;
/**
 * 遍歷某目錄下的所有文件
 * @author Administrator
 *
 */
public class traverseDir {
	public static void main(String[] args) {
		String path = "D:/new";//這裏填寫你要遍歷目錄路徑
		File file = new File(path);
		traverse(file);
	}
	
	public static void traverse(File file){
		//先對傳入參數做判空處理
		if (null == file) {
			return;
		}
		//遞歸頭,遞歸的出路
		if (file.isFile()) {
			System.out.println(file.getAbsolutePath());
			return;
		}
		
		File[] files = file.listFiles();
		//如果目錄爲空目錄則要return,否則會空指針異常
		if (files == null) {
			return;
		}
		for (File file2 : files) {
			if (file2.isDirectory()) {
				traverse(file2);//遞歸
			}else {
				System.out.println(file2.getAbsolutePath());
			}
		}
		
	}
	
}


還補充一個例子就是,刪除某路徑下的文件及其子目錄

import java.io.File;
/**
 * 刪除臨時文件及其內部文件夾
 * @author Administrator
 *
 */
public class DeleteFiles {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String path = "F:\\temp";//這裏填寫你文件路徑
		File file = new File(path);
		delete(file, path);
	}

	public static void delete(File file,String path) {
		// 違反驗證
		if (file == null) {
			return;
		}
		if (file.isFile()) {
			file.delete();
		}
		File[] mFiles = file.listFiles();
		if (mFiles == null) {
			return;
		}
		for (File file2 : mFiles) {
			delete(file2,path);//遞歸
		}
		
		//刪除目錄
		if (!file.getAbsolutePath().equals(path)) {
			file.delete();
		}

	}

}

注意:在寫文件路徑path時,最好是用反雙斜槓“\\”,如果你用"/"在比較
file.getAbsolutePath().equals(path)
時,會發現匹配不上,那麼刪除子目錄就不會成功!


結語:會飛時別忘了破繭時的痛楚!


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