File 類 獲取路徑 名字等信息 詳解

File 類  獲取路徑 名字等信息  詳解

Table of Contents

File 類  獲取路徑 名字等信息  詳解


 首先 , 看測試代碼 , 分三種路徑對api 獲取情況分析 並總結

package test.file;

import java.io.File;
import java.io.IOException;

public class FileAPITest {
	public static File file;
	
	public static void main(String[] args) {
		testSimple();
		testMix();
		testVultr();
	}
		/***
	 * 測試正常路徑
	 * 總結:
	 * 	 	絕對路徑 與 普通路徑  與權威路徑 一致  但是 權威路徑需要拋出io異常
	 * 
	 * 		獲得文件名 直接getName 獲得單獨文件名稱
	 * 	
	 *  		獲得父目錄 兩個方法 都是獲得全部路徑 
	 *  							區別是一個返回字符  一個返回文件
	 *  		盤符大小 
	 *  				兩個取剩餘字節數
	 *  				一個取總字節數
	 *  
	 *  		
	 */
	public static void testSimple(){
	file = new File("D:\\tomcat7\\tes001\\00202\\002.txt");
		
		//  D:\tomcat7\tes001\00202\002.txt
		System.out.println(file.getAbsolutePath());
		try {
			//D:\tomcat7\tes001\00202\002.txt
			System.out.println(file.getCanonicalPath());
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		// D:\tomcat7\tes001\00202\002.txt
		System.out.println(file.getPath());

		//   002.txt
		System.out.println(file.getName());//獲得文件名
		
		//D:\tomcat7\tes001\00202\002.txt
		System.out.println(file.getAbsoluteFile());
		try {
			//D:\tomcat7\tes001\00202\002.txt
			System.out.println(file.getCanonicalFile());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		//獲得父目錄
		
		//D:\tomcat7\tes001\00202
		System.out.println(file.getParent());
		//D:\tomcat7\tes001\00202
		System.out.println(file.getParentFile());
		
		/**
		 * 
		 * 返回此抽象路徑名指定的分區中未分配的字節數。 
		 * 返回的未分配字節數是一個提示,而不是一個保證,只能使用這些字節的一部分。
		 * 未分配字節數很可能在此調用後立即與實際相符。
		 * 某些外部 I/O 操作可能使其與實際不符,這些操作包括那些在此虛擬機外部系統上進行的操作。
		 *  		===>此方法不保證對此文件系統的寫操作將成功。 
		 *  分區上的未分配字節數;
		 *  如果抽象路徑名沒有指定分區,則返回 0L。
		 *  		返回值將小於等於 getTotalSpace() 返回的總文件系統大小。 
		 */
		//    21427404800
		System.out.println(file.getFreeSpace());
		/***
		 * 返回此抽象路徑名指定的分區上可用於此虛擬機的字節數。
		 * 若有可能,此方法將檢查寫權限和其他操作系統限制,
		 * 因此與 getFreeSpace() 相比,此方法能更準確地估計可實際寫入的新數據數。 
		 * 返回的可用字節數是一個提示,而不是一個保證,只能使用這些字節的一部分。
		 * 未分配字節數很可能在此調用後立即與實際相符。某些外部 I/O 操作可能使其與實際不符,這些操作包括那些在此虛擬機外部系統上進行的操作。此方法不保證對此文件系統的寫操作將成功。 
		 * 
		 * 分區上的可用字節數;
		 * 如果抽象路徑名沒有指定分區,則返回 0L。
		 * 
		 * 
		 * 在此信息不可用的系統上,此方法等效於調用 getFreeSpace()。 
		 */
		//21427404800
		System.out.println(file.getUsableSpace()>>10>>10>>10);

		/***
		 * 返回此抽象路徑名指定的分區大小。 
		 * 返回:
		 * 
		 * 分區的大小,以字節爲單位;如果此抽象路徑名沒有指定分區,則返回 0L。 
		 */
		// 62271778816
		System.out.println(file.getTotalSpace()>>10>>10>>10);
		

	}
	/**
	 * 
	 	 * 總結:
	 * 	 絕對路徑 與 普通路徑 一致 
	 * 	 與權威路徑 不同  權威路徑能夠識別路徑中的 ..  可以得到真實路徑
	 * 
	 * 		獲得文件名 直接getName 獲得單獨文件名稱
	 * 	
	 *  		獲得父目錄 兩個方法 都是獲得全部路徑加點 需要特殊處理 
	 *  
	 *  		盤符大小  一致 不特別說明
	 * 
	 */
	public static void testVultr(){
		file = new File("D:\\tomcat7\\tes001\\00202\\..\\001.txt");
		
//		D:\tomcat7\tes001\00202\..\001.txt
		System.out.println(file.getAbsolutePath());
		try {
			//D:\tomcat7\tes001\001.txt
			System.out.println(file.getCanonicalPath());
		} catch (IOException e1) {
			e1.printStackTrace();
		}
//		D:\tomcat7\tes001\00202\..\001.txt
		System.out.println(file.getPath());

		//  001.txt
		System.out.println(file.getName());//獲得文件名
		
//		D:\tomcat7\tes001\00202\..\001.txt
		System.out.println(file.getAbsoluteFile());
		try {
//			D:\tomcat7\tes001\001.txt
			System.out.println(file.getCanonicalFile());
		} catch (IOException e) {
			e.printStackTrace();
		}
	
		//獲得父目錄
		
//		D:\tomcat7\tes001\00202\..
		System.out.println(file.getParent());
//		D:\tomcat7\tes001\00202\..
		System.out.println(file.getParentFile());
		 
	}

/***
	 * 測試相對路徑
	 * 
	 * 與其之前的相比
	 * 
	 * 	絕對路徑與權威路徑 相同
	 * 
	 * 	普通路徑與文件名相同
	 * 	
	 * 	絕對文件和權威文件都是獲取文件路徑+文件名
	 * 
	 * 	最大區別是父目錄無法獲取 爲null
	 * 
	 */
	public static void testMix(){
		//相同包下的一個java類
		file = new File("FileRename.java");
		
		//E:\projectDIR\java_code\o2oSpace\Test\FileRename.java
		System.out.println(file.getAbsolutePath());
		try {
			System.out.println(file.getCanonicalPath());
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		//FileRename.java
		System.out.println(file.getPath());
		System.out.println(file.getName());//獲得文件名
		
		//E:\projectDIR\java_code\o2oSpace\Test\FileRename.java
		System.out.println(file.getAbsoluteFile());
		try {
			System.out.println(file.getCanonicalFile());
		} catch (IOException e) {
			e.printStackTrace();
		}
	
		//獲得父目錄
		//null
		System.out.println(file.getParent());
		System.out.println(file.getParentFile());
		 
	}
	
	
}

代碼運行 需要配置自己的文件名 

ps:  路徑中的.. 是上級文件夾的意思

針對文件的三種路徑,簡單易記的方案是:

1.如果需要獲取全路徑+文件名

       使用 權威路徑getCanonicalPath 是最穩妥的

2.如果只是單獨獲得文件名 ,直接getName   

3. 若果獲得父目錄 (在相對路徑中不能獲取)

     getParent返回字符

     getParentFile返回文件

4.獲取盤空間的剩餘大小方案中儘量使用getUsableSpace  

 最好的方案其實就是寫路徑儘量使用絕對路徑 在後續操作上會好很多

如果沒辦法使用絕對路徑 , 卻要獲取父目錄 可以先獲取全路徑然後再截斷的方式獲得

暫時想到的就是這麼多,歡迎留言指正!

 

 


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