複習13:File

File相關

  • File對象
  • 類路徑
  • 文件過濾器
  • 案例:遞歸刪除多級目錄

File對象

File對象是什麼

文件或者目錄

File對象的創建
  • File(File parenet,String childPathName)

  • File(String pathname)

    • 只是在JVM中創建了一個file對象,與本地無關
  • File(String parentPathName,String childPathName)

  • File(URI uri)

    • URI:統一資源標識符

      • C:\winods\ …
      • \ubt\home\ …
    • URL:網絡資源標識符

      • http:// …
      • https:// …
      • ftp:// …

絕對路徑:從盤符/根目錄出發的路徑

相對路徑:從當前目錄出發的路徑,Java中的默認相對路徑是工程所在目錄

Java中,“\”代表轉義字符,不能作爲路徑的分割符

  • 可以使用“/”代替
  • 可以使用“\ \”代替
File對象的常用方法
  • boolean exist():file對象是否存在於本地
  • boolean isDirectory():file對象是否是目錄
  • boolean isFile():file是否是文件
  • boolean mkdir():若file對象不存在,則創建一個file目錄
    • 只能創建一級目錄,不能創建多級目錄
  • boolean mkdirs():若file對象不存在,則創建一個多級目錄
  • boolean createNewFile():若file對象不存在,則創建一個file文件
    • 若file對象存在於多級目錄之中,則多級目錄必須存在;若不存在,將拋出異常
  • String getName():獲取file對象的名字
  • String getPath():獲取file對象的路徑
  • int length():獲取file對象的長度
  • long lastModified():獲取file對象最後一次被修改的時間
  • boolean delete():刪除file對象
    • 只能刪除文件或者空目錄,無法刪除多級目錄

注意1:同一個file對象只能選擇mkdir()、createNewFile()中的一種使用,若兩種方法同時使用,後面的方法不起作用(前面的方法執行後,本地已存在file對象


類路徑

classpath,也叫classes

  • Java中的默認類路徑:Java工程下的src目錄中的文件編譯後的目標目錄—>Java工程下的bin目錄

.Java文件被編譯成.class文件,無法被編譯的文件原封不動地複製過去

動態獲取絕對路徑
  • 類加載器的作用:將.class文件加載到JVM
  • 類加載器的種類:三種,其中兩種用來加載jre中的類庫,剩下一種用來加載程序員寫的類
  • 類加載器的使用:
package day20191112;

public class Demo01 {
	public void ClassLoaderTest() {
        //獲取類加載器
		ClassLoader cl = Demo01.class.getClassLoader();
        //獲取***當前src目錄下的“目標文件”***的絕對路徑
		String path = cl.getResource("day20191112/demo.txt").getPath();
		System.out.println(path);
	}
}
package day20191112;

public class Demo01 {
	public void ClassLoaderTest() {
        //獲取***當前包下的目標文件***的絕對路徑
		String path = Demo01.class.getResource("demo.txt").getPath();
		System.out.println(path);
	}
}

同一個工程下的所有類共用一個類加載器


文件過濾器

package day20191113;

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

public class Demo01 {
	public static void main(String[] args) {
		File file = new File("D:\\BaiDu\\BaiduNetdiskDownload\\MyNotes\\複習\\Collection&Map");
		if(file.isDirectory()) {
            //listFiles():返回file對象下的所有文件/目錄(不包括目錄下的內容)
			File[] files = file.listFiles(new FileFilter() {
				/**
				 * FileFilter是一個抽象類,使用匿名內部類的方式進行實例化
				 * file:要篩選的文件對象
				 * 返回值爲true,表示該文件對象要保留;反之,表示該文件對象被過濾
				 */
				public boolean accept(File file) {
					// TODO Auto-generated method stub
					return file.getName().endsWith(".md");
				}
				
			});
			for(File f : files) {
				System.out.println(f.getName());
			}
		}
	}
}


案例:遞歸刪除多級目錄

package day20191113;

import java.io.File;

public class Demo02 {
	public static void main(String[] args) {
		DeleteFile deleteFile = new DeleteFile();
		deleteFile.doIt();
	}
}
class DeleteFile{
	
	public void doIt() {
		File file = new File("D:\\BaiDu\\BaiduNetdiskDownload\\MyNotes");
		delete(file);
	}
	public void delete(File file) {
		File[] files = file.listFiles();
		for(File f : files) {
			/**
			 * 如果是f是文件,則直接刪除;如果不是文件,則進入遞歸
			 */
			if(f.isFile()) {
				f.delete();
			}else {
				delete(f);
			}
		}
		file.delete();
	}
}


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