【Java IO流】File類的使用

來源:尚硅谷:http://www.gulixueyuan.com/course/311

File類的使用

  • java.io.File類:文件和文件目錄路徑的抽象表示形式,與平臺無關
  • File 能新建、刪除、重命名文件和目錄,但 File 不能訪問文件內容本身。 如果需要訪問文件內容本身,則需要使用輸入/輸出流。
  • 想要在Java程序中表示一個真實存在的文件或目錄,那麼必須有一個File對 象,但是Java程序中的一個File對象,可能沒有一個真實存在的文件或目錄。
  • File對象可以作爲參數傳遞給流的構造

File 類的使用:常用構造器

  • public File(String pathname):
    • 以pathname爲路徑創建File對象,可以是絕對路徑或者相對路徑,如果 pathname是相對路徑,則默認的當前路徑在系統屬性user.dir中存儲。
      • 絕對路徑:是一個固定的路徑,從盤符開始
      • 相對路徑:是相對於某個位置開始
  • public File(String parent,String child):
    • 以parent爲父路徑,child爲子路徑創建File對象。
  • public File(File parent,String child):
    • 根據一個父File對象和子文件路徑創建File對象

File 類的使用:常用方法

File類的獲取功能

public String getAbsolutePath():獲取絕對路徑
public String getPath() :獲取路徑
public String getName() :獲取名稱
public String getParent():獲取上層文件目錄路徑。若無,返回null
public long length() :獲取文件長度(即:字節數)。不能獲取目錄的長度。
public long lastModified() :獲取最後一次的修改時間,毫秒值

如下的兩個方法適用於文件目錄:
public String[] list() :獲取指定目錄下的所有文件或者文件目錄的名稱數組
public File[] listFiles() :獲取指定目錄下的所有文件或者文件目錄的File數組

File類的重命名功能

  • public boolean renameTo(File dest):把文件重命名爲指定的文件路徑

File類的判斷功能

public boolean isDirectory():判斷是否是文件目錄
public boolean isFile() :判斷是否是文件
public boolean exists() :判斷是否存在
public boolean canRead() :判斷是否可讀
public boolean canWrite() :判斷是否可寫
public boolean isHidden() :判斷是否隱藏

File類的創建功能

創建硬盤中對應的文件或文件目錄

public boolean createNewFile() :創建文件。若文件存在,則不創建,返回false
public boolean mkdir() :創建文件目錄。如果此文件目錄存在,就不創建了。如果此文件目錄的上層目錄不存在,也不創建。
public boolean mkdirs() :創建文件目錄。如果此文件目錄存在,就不創建了。如果上層文件目錄不存在,一併創建

注意事項:如果你創建文件或者文件目錄沒有寫盤符路徑,那麼,默認在項目 路徑下

File類的刪除功能

public boolean delete():刪除文件或者文件夾

刪除注意事項:

  • Java中的刪除不走回收站。
  • 要刪除一個文件目錄,請注意該文件目錄內不能包含文件或者文件目

File類的練習

在這裏插入圖片描述
練習一:

    @Test
    public void test1() throws IOException {
        File file = new File("D:\\io\\io1\\hello.txt");
        //創建一個與file同目錄下的另外一個文件,文件名爲:haha.txt
        File destFile = new File(file.getParent(),"haha.txt");
        boolean newFile = destFile.createNewFile();
        if(newFile){
            System.out.println("創建成功!");
        }
    }

練習二:

//方式一:
	@Test
	public void test1(){
		File srcFile = new File("d:\\code");
		
		String[] fileNames = srcFile.list();
		for(String fileName : fileNames){
			if(fileName.endsWith(".jpg")){
				System.out.println(fileName);
			}
		}
	}
//方式二:	
	@Test
	public void test2(){
		File srcFile = new File("d:\\code");
		
		File[] listFiles = srcFile.listFiles();
		for(File file : listFiles){
			if(file.getName().endsWith(".jpg")){
				System.out.println(file.getAbsolutePath());
			}
		}
	}

練習三:

//方式一:使用遞歸

	public static void main(String[] args) {
		// 遞歸:文件目錄
		/** 打印出指定目錄所有文件名稱,包括子文件目錄中的文件 */

		// 1.創建目錄對象
		File dir = new File("E:\\teach\\01_javaSE\\_尚硅谷Java編程語言\\3_軟件");

		// 2.打印目錄的子文件
		printSubFile(dir);
	}

	public static void printSubFile(File dir) {
		// 打印目錄的子文件
		File[] subfiles = dir.listFiles();

		for (File f : subfiles) {
			if (f.isDirectory()) {// 文件目錄
				printSubFile(f);
			} else {// 文件
				System.out.println(f.getAbsolutePath());
			}

		}
	}
	// 方式二:循環實現
	// 列出file目錄的下級內容,僅列出一級的話
	// 使用File類的String[] list()比較簡單
	public void listSubFiles(File file) {
		if (file.isDirectory()) {
			String[] all = file.list();
			for (String s : all) {
				System.out.println(s);
			}
		} else {
			System.out.println(file + "是文件!");
		}
	}

	// 列出file目錄的下級,如果它的下級還是目錄,接着列出下級的下級,依次類推
	// 建議使用File類的File[] listFiles()
	public void listAllSubFiles(File file) {
		if (file.isFile()) {
			System.out.println(file);
		} else {
			File[] all = file.listFiles();
			// 如果all[i]是文件,直接打印
			// 如果all[i]是目錄,接着再獲取它的下一級
			for (File f : all) {
				listAllSubFiles(f);// 遞歸調用:自己調用自己就叫遞歸
			}
		}
	}

擴展1:

	// 拓展1:求指定目錄所在空間的大小
	// 求任意一個目錄的總大小
	public long getDirectorySize(File file) {
		// file是文件,那麼直接返回file.length()
		// file是目錄,把它的下一級的所有大小加起來就是它的總大小
		long size = 0;
		if (file.isFile()) {
			size += file.length();
		} else {
			File[] all = file.listFiles();// 獲取file的下一級
			// 累加all[i]的大小
			for (File f : all) {
				size += getDirectorySize(f);// f的大小;
			}
		}
		return size;
	}

擴展2:

	// 拓展2:刪除指定的目錄
	public void deleteDirectory(File file) {
		// 如果file是文件,直接delete
		// 如果file是目錄,先把它的下一級幹掉,然後刪除自己
		if (file.isDirectory()) {
			File[] all = file.listFiles();
			// 循環刪除的是file的下一級
			for (File f : all) {// f代表file的每一個下級
				deleteDirectory(f);
			}
		}
		// 刪除自己
		file.delete();
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章