Java之IO操作,File類、文件過濾器

IO操作概念:

什麼是IO操作,一般在程序中用到的數據只是存儲在內存中,當程序結束後,存儲的數據則會消失,要是讓數據永久的存儲在硬盤或者持久化設備上,就可以了。

當從程序內存中的數據存儲到持久化設備中,此動作稱爲輸出(寫入)Output操作。

當從持久化設備中(硬盤)讀取到內存中,此動作稱爲輸入(讀取)Input操作。

File類:

數據存儲在文件中,文件又存儲在文件夾中,Java是將文件或者文件夾封裝成File對象,File是文件和目錄路徑名(文件夾)的抽象表現形式。

1.1 File類的構造函數

File(File parent,String child);//參數parent是一個File對象,根據parent抽象路徑名和child文件路徑名字符串創建一個File實例。
File(String pathname);//根據給定的路徑名字符串轉換爲抽象路徑名創建一個新的File實例
File(String parent,String child);//根據給定的抽象路徑名字符串和一個child路徑名創建一個新的File實例。

三種創建File實例的代碼:

import java.io.File;

/*
 * java.io.File
 * 		將操作系統中的,文件,目錄(文件夾),路徑,封裝成File對象
 * 		提供方法,操作系統中的內容
 */
public class Filedemo {
	//File類的構造方法(三種)
	//1.File(String pathname)
	//2.File(String parent,String child)//傳遞字符串父路徑和子路徑,優勢在於可以單獨的操作父路徑和子路徑
	//3.File(File parent,String child)//傳遞的路徑,傳遞File類型的父路徑,和String類型的子路徑,優點在於父路徑可以調用File類方法
	public static void main(String[] args){
		function1();
		function2();
	}
	public static void function1(){
		File file = new File("E:\\kankan");
		File file1 = new File("E:","qq");
		System.out.println(file);
		System.out.println(file1);
	}
	public static void function2(){
		File parent = new File("E:");
		File file = new File(parent,"haha");
		System.out.println(file);
	}
} 


1.2 File類方法

File方法有很多種,其中分爲File類的獲取方法,即獲取文件相關信息。

String getAbsolutePath();//返回此抽象路徑名的絕對路徑名字符串。
String getName();//返回此抽象路徑名的文件或目錄名稱
String getPath();//返回此抽象路徑名轉化爲一個路徑名字符串
long length();//返回此抽象路徑名錶示的文件的長度。
public class FileMethodDemo {
	public static void main(String[] args) {
		//創建文件對象
		File file = new File("Test22.java");
		//獲取文件的絕對路徑,即全路徑
		String absPath = file.getAbsolutePath();
		//File中封裝的路徑是什麼獲取到的就是什麼。
		String path = file.getPath();
		//獲取文件名稱
		String filename = file.getName();
		//獲取文件大小
		long size = file.length();
		
		System.out.println("absPath="+absPath);
		System.out.println("path="+path);
		System.out.println("filename="+filename);
		System.out.println("size="+size);
	}
}


文件和文件夾的創建和刪除

boolean createNewFile();//創建一個空的文件。
boolean mkdir();//創建一個空的文件夾。
boolean delete();//刪除抽象路徑名錶示的文件或目錄,並返回一個Boolean值。
boolean isFile();//判斷此抽象路徑名錶示的是不是一個標準的文件。
boolean isDirectory();//判斷此抽象路徑名錶示的是不是一個標準的文件夾,
boolean exists();//判斷此抽象路徑名錶示的文件或者文件夾是否存在。

public class FileMethodDemo2 {
	public static void main(String[] args) throws IOException {
		// 對文件或者文件加進行操作。
		File file = new File("e:\\file.txt");
		// 創建文件,如果文件不存在,創建 true 如果文件存在,則不創建 false。 如果路徑錯誤,IOException。
		boolean b1 = file.createNewFile();
		System.out.println("b1=" + b1);
		//-----------刪除文件操作-------注意:不去回收站。慎用------
		 boolean b2 = file.delete();
		 System.out.println("b2="+b2);

		//-----------需要判斷文件是否存在------------
		 boolean b3 = file.exists();
		 System.out.println("b3="+b3);

		//-----------對目錄操作 創建,刪除,判斷------------
		File dir = new File("e:\\abc");
		//mkdir()創建單個目錄。//dir.mkdirs();創建多級目錄
		boolean b4 = dir.mkdir();
		System.out.println("b4="+b4);
		//刪除目錄時,如果目錄中有內容,無法直接刪除。
		boolean b5 = dir.delete();
		//只有將目錄中的內容都刪除後,保證該目錄爲空。這時這個目錄纔可以刪除。
		System.out.println("b5=" + b5);

		//-----------判斷文件,目錄------------
		File f = new File("e:\\javahaha");// 要判斷是否是文件還是目錄,必須先判斷存在。
		// f.mkdir();//f.createNewFile();
		System.out.println(f.isFile());
		System.out.println(f.isDirectory());
	}
}

方法list()和listFiles()

文件存放在文件夾中,要想獲取一個文件夾中的所有文件,包括文件夾中的文件夾內的文件,則就要用到下面的方法,

String[] list(FilenameFilter filter)  返回一個字符串數組,這些字符串指定此抽象路徑名錶示的目錄中的文件和目錄。

File[] listFiles()  返回一個抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中的文件。

實例:

public class FileMethodDemo3 {
	public static void main(String[] args) {
		File dir = new File("e:\\java_code");
		//獲取的是目錄下的當前的文件以及文件夾的名稱。
		String[] names = dir.list();
		for(String name : names){
			System.out.println(name);
		}
		//獲取目錄下當前文件以及文件對象,只要拿到了文件對象,那麼就可以獲取其中想要的信息
		File[] files = dir.listFiles();
		for(File file : files){
			System.out.println(file);
		}
	}
}


文件過濾器
接着上面的方法還有一個問題,能不能對此抽象路徑名下的文件或者目錄,進行過濾後再獲取。則就用到了文件過濾器。

FileFilter類

File[] listFiles(FileFilter filter) 返回抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中滿足指定過濾器的文件和目錄。

FileFilter類用於抽象路徑名的過濾器,是一個接口類,僅有一個方法,爲accept。

即:boolean accpet(File pathname);//測試指定抽象路徑名是否包含在某個路徑名列表中。

測試類

public class FileDemo2 {
	public static void main(String[] args) {
		//獲取擴展名爲.java所有文件
		//創建File對象
		File file = new File("E:\\code\\day11_code");
		//獲取指定目錄下的文件夾
		File[] files = file.listFiles(new FileFileterByDir());
		//遍歷獲取到的所有符合條件的文件
		for (File f : files) {
			System.out.println(f);
		}
	}
}
//文件過濾器
class FileFileterByDir implements FileFilter{
	public boolean accept(File pathname) {
		return pathname.isDirectory();
	}
}



FilenameFilter類

實現此接口的類實例可以用於過濾文件名

File[] listFiles(FilenameFilter filter) 返回抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中滿足指定過濾器的文件和目錄。

即:boolean accpet(File dir,String name);//測試指定文件是否包含在某個文件列表中。

測試類

public class FileDemo2 {
	public static void main(String[] args) {
		//獲取擴展名爲.java所有文件
		//創建File對象
		File file = new File("E:\\code\\day11_code");
		//獲取指定擴展名的文件,由於要對所有文件進行擴展名篩選,因此調用方法需要傳遞過濾器
		File[] files = file.listFiles(new MyFileFilter());
		//遍歷獲取到的所有符合條件的文件
		for (File f : files) {
			System.out.println(f);
		}
	}
}
//定義類實現文件名稱FilenameFilter過濾器
class MyFileFilter implements FilenameFilter{
	public boolean accept(File dir, String name) {
		return name.endsWith(".java");
	}
}






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