1. 程式人生 > >IO知識點(一)—— Java的 File類,以及常用方法

IO知識點(一)—— Java的 File類,以及常用方法

注意:檔案和資料夾都是用 File 代表

 

1,建立一個檔案物件

 使用絕對路徑或者相對路徑建立 File物件

public class AtWill {

    public static void main(String[] args) {
        // 絕對路徑
        File f1 = new File("H:\\碼雲project1");
        System.out.println("f1的絕對路徑:" + f1.getAbsolutePath());

        // 相對路徑,相對於工作目錄,如果在eclipse中,就是專案目錄
        File f2 = new File("test.txt");
        System.out.println("f2的絕對路徑:" + f2.getAbsolutePath());
  
        // 把f1作為父目錄建立檔案物件(常用)
        File f3 = new File(f1, "test.txt");
        System.out.println("f3的絕對路徑:" + f3.getAbsolutePath());
    }
}

2,檔案常用方法1

注意1: 需要在H:\\碼雲project\\gogo\\確實存在一個lala1.txt,才可以看到對應的檔案長度、修改時間等資訊

注意2: renameTo方法用於對物理檔名稱進行修改,但是並不會修改File物件的name屬性。 

public class AtWill {

	public static void main(String[] args) {
		  
        File file = new File("H:\\碼雲project\\gogo\\lala1.txt");
        System.out.println("當前檔案是:" +file);
        
        // 檔案是否存在
        System.out.println("判斷是否存在:"+file.exists());
         
        // 是否是資料夾
        System.out.println("判斷是否是資料夾:"+file.isDirectory());
          
        // 是否是檔案(非資料夾)
        System.out.println("判斷是否是檔案:"+file.isFile());
          
        // 檔案長度
        System.out.println("獲取檔案的長度:"+file.length());
          
        // 檔案最後修改時間
        long time = file.lastModified();
        Date d = new Date(time);
        System.out.println("獲取檔案的最後修改時間:"+d);
        // 設定檔案修改時間為1970.1.1 08:00:00
        file.setLastModified(0);
        // 修改後——》該檔案的最後修改時間屬性,會修改
        long time6 = file.lastModified();
        Date d6 = new Date(time6);
        System.out.println("修改了最後修改時間後,最後修改時間屬性變為:"+d6);
          
        // 檔案重新命名(lala1——》lala6)
        File f2 =new File("H:\\碼雲project\\gogo\\lala.text");
        file.renameTo(f2);
        // 修改後——》該檔名屬性,並不會修改
        System.out.println("修改了檔名後,檔名屬性變為:"+file);
         
	}
}

3,檔案常用方法2

public class TestFile {
  
    public static void main(String[] args) throws IOException {
  
        File f = new File("d:/LOLFolder/skin/garen.ski");
  
        // 以字串陣列的形式,返回當前資料夾下的所有檔案(不包含子檔案及子資料夾)
        f.list();
  
        // 以檔案陣列的形式,返回當前資料夾下的所有檔案(不包含子檔案及子資料夾)
        File[]fs= f.listFiles();
  
        // 以字串形式返回獲取所在資料夾
        f.getParent();
  
        // 以檔案形式返回獲取所在資料夾
        f.getParentFile();
        // 建立資料夾,如果父資料夾skin不存在,建立就無效
        f.mkdir();
  
        // 建立資料夾,如果父資料夾skin不存在,就會建立父資料夾
        f.mkdirs();

		File f = new File("H:\\碼雲project1\\test3");
        // 建立一個空檔案,如果父資料夾skin不存在,就會丟擲異常
        f.createNewFile();
        // 所以建立一個空檔案之前,通常都會建立父目錄
        f.getParentFile().mkdirs();
        try {
			f.createNewFile();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

        // 列出所有的碟符c: d: e: 等等
        File[] sss = f.listRoots();
        for(File file2 : sss) {
        	System.out.println(file2);
        }
  
        // 刪除檔案
        f.delete();
  
        // JVM結束的時候,刪除檔案,常用於臨時檔案的刪除
        f.deleteOnExit();
  
    }
}

4,練習-遍歷資料夾1

一般說來作業系統都會安裝在C盤,所以會有一個 C:\WINDOWS目錄。

遍歷這個目錄下所有的檔案(不用遍歷子目錄)

找出這些檔案裡,最大的和最小(非0)的那個檔案,打印出他們的檔名

注: 最小的檔案不能是0長度 

public class AtWill {

	public static void main(String[] args) {
	
		File file = new File("C:\\WINDOWS");
		File[] files = file.listFiles();
		
		File max = null;
		File min = null;
		// 取出一個位元組大小大於0的檔案,用於作為判斷最大或最小初始檔案
		for(File f : files) {
			if(f.length() != 0) {
				max = f;
				min = f;
				break;
			}
		}
		
		for(int i=0; i<files.length; i++) {
			if(max.length() < files[i].length()) {
				max = files[i];
			}
		}
		for(int i=0; i<files.length; i++) {
			if(min.length() > files[i].length() && files[i].length()!=0) {
				min = files[i];
			}
		}
		System.out.println("最大的檔案是:"+max+" ,其位元組大小是"+max.length());
		System.out.println("最小的檔案是:"+min+" ,其位元組大小是"+min.length());
	
	}
}

5,練習-遍歷子資料夾1(遞迴)

public class AtWill {

	public static void main(String[] args) {
		File file = new File("H:\\碼雲project");
		File f[] = file.listFiles();
		show(f);
	}

	public static void show(File dir[]) {
		if (dir == null) {
			return;
		} else {
			for (File fi : dir) {
				if (fi.isDirectory()) {
					show(fi.listFiles());
				}
				if (fi.isFile()) {
					System.out.println(fi.getName());
				}
			}
		}
	}
}

 

參考來源於:

http://how2j.cn/k/io/io-file/345.html#nowhere