天天看點

java之20天 File對象(一)

File類 的使用

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

/**
 * File類 
 * (彌補了IO流的不足,不能對檔案夾進行操作)
 * 1)用來将檔案或者檔案夾 封裝成對象
 * 2)友善對檔案或者檔案夾進行操作
 * 3)File對象可以作為參數傳遞給流的構造函數
 * 4)了解File類中常用的方法.
 * 
 * File 類的常見方法
 * 1.建立
 * 		boolean createNewFile():在指定的位置建立檔案,如果該檔案已經存在,則不建立,傳回false
 *     							和 輸出流不一樣,輸出流對象一建立就建立檔案,而且會覆寫已存在的檔案.
 *      //程式中需要用到臨時檔案 
 *      File tf=createTempFile("臨時檔案","tmp");
 *      File tf=createTempFile("臨時檔案","tmp","c:\\system32\\");
 *     
 * 2.删除
 *    boolean  delete()  : 删除失敗傳回 false
 *    void     deleteOnExit():  程式退出的時候 ,删除指定檔案
 *    
 * 3.判斷
 *     boolean canExecute():如果檔案存在傳回true 表示可以操作 ,不存在傳回false 表示不能執行
 *     boolean canRead(); 檔案是否可讀. 
 *     boolean canWrite(): 檔案是否可寫
 *     int compartTo(): 按檔案名比較
 *     boolean isAbsolute():是否是絕對路徑
 *     boolean isHidden(); 是否是隐藏檔案
 *     
 *     boolean exists():檔案是否存在
 *     boolean isDirectory():是否是目錄 (必須要判斷是否存在)
 *     boolean isFile():是否是檔案 (必須要判斷是否存在)
 *     
 * 4.擷取資訊
 *    String getName();擷取檔案名
 *    String getPath(): 擷取路徑 
 *    String getParent(): 擷取父目錄  如果擷取的的是相對路徑傳回的是null
 *    String getAbsolutePath(): 擷取絕對路徑
 *    File   getAbsoluteFile(): 擷取絕對路勁檔案對象
 *    long   lastModified(): 擷取檔案的組後修改時間
 *    long   lenth(): 擷取檔案的長度.
 *    String getCanonicalPath();擷取規範的檔案路徑
 *    boolean renameTo():修改名稱
 *    
 *    File[]   listRoots():  擷取目前系統可用 盤符
 *    String[] list():表示的目錄中的檔案和目錄。(包含隐藏檔案 和 目錄)
 *    
 *
 */
public class FileDemo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//consMethod();
		//method_1();
		//method_2();
		//method_3();
		//method_4();
		//method_5();
		method_6();
	}
	//擷取目前盤符下的檔案和目錄 (包含隐藏檔案 和 目錄)
	public static void method_6(){
		File f=new File("cc\\");
		String[] names=f.list();  //調用 list方法的file對象必須是封裝了一個目錄,該目錄必須存在
		for (String string : names) {
			System.out.println(string); 
		}
	}
	
	//擷取盤符
	public static void method_5(){
		File[] files=File.listRoots();
		for (File file : files) {
			System.out.println(file);  //
			System.out.println(file.length());  //傳回目前盤符的大小
		}
		
		/*傳回:
		 	C:\
			D:\
			E:\
			F:\
		*/
		
	}
	//修改檔案名
	public static void method_4(){
		File f1=new File("c:\\MyTools.java");
		File f2=new File("c:\\Tools.java");
		sop("rename:"+f1.renameTo(f2));  //将 MyTools.java --> Tools.java
		
		File f3=new File("D:\\Tools.java");
		sop("rename And like move:"+f1.renameTo(f3));  //發現C:\\MyTools.java 檔案 移動到 D:\\Tools.java
		sop("rename And like move:"+f3.renameTo(f1));  //發現 又将  D:\\Tools.java 移動到了C:\\MyTools.java 下面了
	}
	
	//擷取檔案資訊
	public static void method_3() throws IOException{
		File f=new File("bb\\aa\\a.txt");
		
		
		sop("path:"+f.getPath());  //擷取封裝的路徑
		sop("Canonicalpath:"+f.getCanonicalPath());  //擷取封裝的路徑
		sop("absPath:"+f.getAbsolutePath());  //擷取檔案的絕對路徑
		sop("parentPath:"+f.getParent());  //擷取檔案的絕對路徑中的父母.如果擷取的是相對路徑,傳回null
											//如果相對路徑中有上一層目錄,那麼該目錄就是傳回結果
		sop("modified:"+f.lastModified()); //最後的修改時間
		
		sop("length:"+f.length());
	}
	
	
	//檔案判斷 
	public static void method_2() throws IOException{
		File f=new File("isFile.txt");
		
		//記住判斷檔案兌現是否是檔案或者目錄的時候,必須要先判斷檔案對象封裝的内容是否存在.
		//通過exists 判斷
		sop("dir:"+f.isDirectory());  //false
		sop("File:"+f.isFile()); //false 
		
		/*f.createNewFile();
		sop("dir:"+f.isDirectory());  //false
		sop("File:"+f.isFile()); //false 
        */		
		
		//是否是絕對路徑
		sop("isAbsolute:"+f.isAbsolute());
		sop("isHidden:"+f.isHidden());
		
		//誰說上面的.txt 是檔案 也可能是目錄
		f.mkdir();  
		sop("dir:"+f.isDirectory());  //false
		sop("File:"+f.isFile()); //false
		sop("isHidden:"+f.isHidden());
	}
	
	//File常用方法
	public static void method_1() throws IOException{
		
		//建立檔案夾
		File dir=new File("abc");
		sop(dir.mkdir());  //true
		
		//mkdir隻能建立一級目錄
		File dir1=new File("bb\\kk");
		sop(dir1.mkdir());  //false
		
		//建立多級目錄
		File dirs=new File("cc\\kk\\jj\\mm");
		sop(dirs.mkdirs());  //true
		
		//建立
		File f=new File("file.txt");
		sop("create:"+f.createNewFile());
		
		//是否可執行
		sop("execute:"+f.canExecute());
		
		//是否可以讀
		sop("read:"+f.canRead());
		
		//是否可寫
		sop("write:"+f.canWrite());
		 
		//檔案名比較
		sop("compare:"+f.compareTo(new File("ab.txt")));
		
		//檔案是否存在
		sop("exists:"+f.exists());
		
		//删除
	   // sop("delete:"+f.delete());
		
	}
	
	//構造方法示範
	public static void consMethod(){
		//将a.txt封裝成file對象,可以将已有的和 未出現的檔案 或者檔案夾 封裝成  file對象
		File f1=new File("a.txt");   //相對路徑
		
		//可以将 檔案名 作為參數進傳遞進來
		File f2=new File("c:\\abc","b.txt");
		
		
		File d=new File("c:\\abc");
		File f3=new File(d,"c.txt");
		
		sop("f1:"+f1);
		sop("f2:"+f2);
		sop("f3:"+f3);
		
		//發現這個裡面的分隔符 跨平台
		File f4=new File("c:\\a\\b\\c\\a.txt");
		//下面的跨平台
		f4=new File("c:"+File.separator+"a"+File.separator+"b"+File.separator+"c"+File.separator+"a.txt");
		
	}

	public static void sop(Object obj){
		System.out.println(obj);
	}
}