Java面向對象系列[v1.0.0][File類]

無論是文件還是目錄都是用File來操作的,它可以創建、刪除、重命名文件和目錄,但不能訪問文件內容本身,如果需要訪問文件內容本身,則需要使用輸入輸出流

訪問文件和目錄

訪問文件名相關的方法

  • String getName():返回此File對象所表示的文件名或者路徑,如果是路徑則返回最後一級子路徑名
  • String getPath():返回此File對象所對應的路徑名
  • File getAbsoluteFile():返回此File對象的絕對路徑
  • String getAbsolutePath():返回此File對象所對應的絕對路徑名
  • String getParent():返回此File對象所對應目錄(最後一級子目錄)的父目錄名
  • boolean renameTo(File newName):重命名此File對象所對應的文件或者目錄,操作成功返回true,失敗則返回false

文件檢測相關的方法

  • boolean exists(): 判斷File對象所對應的文件或目錄是否存在
  • boolean canWrite():判斷File對象所對應的文件和目錄是否可寫
  • boolean canRead():判斷File對象所對應的文件和目錄是否可讀
  • boolean isFIle():判斷File對象所對應是否是文件,而不是目錄
  • boolean isDirectory():判斷File對象所對應是否是目錄,而不是文件
  • boolean isAbsolute():判斷File對象所對應的文件或目錄是否是絕對路徑

獲取常規文件信息

  • long lastModified():返回文件的最後修改時間
  • long length():返回文件內容的長度

文件操作相關方法

  • boolean createNewFile(): 當此File對象所對應的文件不存在時,該方法將新建一個該File對象所指定的新文件,如果創建成功則返回true否則返回false
  • boolean delete():刪除File對象所對應的文件或路徑
  • static File createTempFile(String prefix, String suffix):靜態方法,File類可以直接調用,其作用是在默認的臨時文件目錄中創建一個臨時的空文件,用給定的前綴、系統生成的隨機數和給定的後綴作爲文件名,其中prefix參數的長度至少3個字節,suffix可以使null,如果是null的話,將使用默認的後綴.tmp
  • static File createTempFile(String prefix, String suffix, File directory):靜態方法,File類可以直接調用,在directory中創建一個臨時的空文件,使用給定前綴、系統生成的隨機數和給定的後綴作爲文件名
  • void deleteOnExit():註冊一個刪除鉤子,指定當Java虛擬機退出時,刪除File對象所對應的文件和目錄

目錄操作相關方法

  • boolean mkdir():試圖創建一個File對象所對應的目錄,如果創建成功,則返回ture,否則返回false,調用該方法時File對象必須對應一個路徑,而不是一個文件
  • String[] list():列出File對象的所有子文件名和路徑名,返回String數組
  • File[] listFiles():列出File對象的所有子文件和路徑,返回File數組
  • static File[] listRoots():靜態方法,File對象可以直接調用,其作用是列出系統所有的根路徑
import java.io.*;

public class FileTest
{
	public static void main(String[] args)
		throws IOException
	{
		// 以當前路徑來創建一個File對象
		var file = new File(".");
		// 直接獲取文件名,輸出一點
		System.out.println(file.getName());
		// 獲取相對路徑的父路徑可能出錯,下面代碼輸出null
		System.out.println(file.getParent());
		// 獲取絕對路徑
		System.out.println(file.getAbsoluteFile());
		// 獲取上一級路徑
		System.out.println(file.getAbsoluteFile().getParent());
		// 在當前路徑下創建一個臨時文件
		File tmpFile = File.createTempFile("aaa", ".txt", file);
		// 指定當JVM退出時刪除該文件
		tmpFile.deleteOnExit();
		// 以系統當前時間作爲新文件名來創建新文件
		var newFile = new File(System.currentTimeMillis() + "");
		System.out.println("newFile對象是否存在:" + newFile.exists());
		// 以指定newFile對象來創建一個文件
		newFile.createNewFile();
		// 以newFile對象來創建一個目錄,因爲newFile已經存在,
		// 所以下面方法返回false,即無法創建該目錄
		newFile.mkdir();
		// 使用list()方法來列出當前路徑下的所有文件和路徑
		String[] fileList = file.list();
		System.out.println("====當前路徑下所有文件和路徑如下====");
		for (var fileName : fileList)
		{
			System.out.println(fileName);
		}
		// listRoots()靜態方法列出所有的磁盤根路徑。
		File[] roots = File.listRoots();
		System.out.println("====系統所有根路徑如下====");
		for (var root : roots)
		{
			System.out.println(root);
		}
	}
}

Windows的路徑分隔符使用反斜線(\),而java裏反斜線表示的是轉義字符,所以如果需要在Windows的路徑下包括反斜線,則應該使用兩條反斜線,或者直接使用斜線(/)也可以,Java程序將斜線視作平臺無關的路徑分隔符

文件過濾器

在File類的list()方法中可以接收一個FilenameFilter參數,通過該參數可以只列出符合條件的文件,FilenameFilter接口裏包含了一個accept(File dir, String name)方法,該方法將依次對指定File的所有子目錄或者文件進行迭代,如果該方法返回true,則list()方法會列出該子目錄或者文件

import java.io.*;

public class FilenameFilterTest
{
	public static void main(String[] args)
	{
		var file = new File(".");
		// 使用Lambda表達式(目標類型爲FilenameFilter)實現文件過濾器。
		// 如果文件名以.java結尾,或者文件對應一個路徑,返回true
		String[] nameList = file.list((dir, name) -> name.endsWith(".java")
			|| new File(name).isDirectory());
		for (var name : nameList)
		{
			System.out.println(name);
		}
	}
}

FilenameFilter接口內只有一個抽象方法,因此該接口是一個函數式接口,可以使用Lambda表達式創建實現該接口的對象

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