JAVA——IO流 篇八(File類的操作)

在API的java.io包中有一個類File,此類主要定義了一些關於java虛擬機訪問文件、文件屬性、操作文件的方法等。

  • 其構造函數有:
    File(File parent, String child)          從父抽象路徑名和子路徑名字符串創建新的 File實例。  
    File(String pathname)                    通過將給定的路徑名字符串轉換爲抽象路徑名來創建新的 File實例。  
    File(String parent, String child)        從父路徑名字符串和子路徑名字符串創建新的 File實例。  
    File(URI uri)                            通過將給定的 file: URI轉換爲抽象路徑名來創建新的 File實例。 
    
//可以將已經存在的,或者不存在的文件或者目錄封裝成file對象 例如將 路徑 D:\\a.txt封裝成爲路徑
File file = new File("D:\\a.txt");//  File(String pathname) 
File file1 = new File("D:\\","a.txt");//File(String parent, String child)

File file2 = new File("D:\\");
File file21 = new File(file2,"a.txt");// File(File parent, String child)
  • 其字段主要有
     static String pathSeparator 	與系統相關的路徑分隔符字符,爲方便起見,表示爲字符串。  
     static char pathSeparatorChar 	與系統相關的路徑分隔符。  
     static String separator 	    與系統相關的默認名稱 - 分隔符字符,以方便的方式表示爲字符串。  
     static char separatorChar      與系統相關的默認名稱分隔符。  
    

可以看出,其字段都是與分隔符有關的,以前我們使用系統路徑分隔符通過System.getProperty(“file.separator”),而在File類裏面特意對其進行了封裝

         String fileSeparator = System.getProperty("file.separator");
		File file = new File("D:"+fileSeparator+"a.txt");
		//改寫爲
		File file2 = new File("D:"+File.separator+"a.txt");
  • 其常見方法有
     	獲取文件名稱 getName();
     	獲取文件路徑 getPath();  getAbsolutePath();
     	獲取文件大小 length();
     	獲取文件修改時間 lastModified();
    
     	創建文件  createNewFile();
     	刪除文件  delete();
     	創建目錄  mkdir();
     	刪除目錄  delete();
     	
     	文件是否存在 exists();
     	是否是文件  isFile();
     	是否是目錄  isDirectory();
     
     	重命名 renameTo(File dest)
    
     	列出可用的文件系統根(盤符)  listRoots();
     	剩餘空間  getFreeSpace()
     	總空間  getTotalSpace()
     	可用空間  getUsableSpace()
    
		File  file = new File("txt.txt");
		String name = file.getName();
		System.out.println("文件名:" + name);
		String path = file.getPath();
		System.out.println("文件路徑:" + path);
		String absolutePath = file.getAbsolutePath();
		System.out.println("文件絕對路徑:" + absolutePath);
		long length = file.length();
		System.out.println("文件大小"+length);
		long time = file.lastModified();
		//System.out.println("最後修改時間"+time);
		Date date = new Date(time);
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
		String dateString = dateFormat.format(date);
		System.out.println("最後修改時間"+dateString);
	
	  //創建文件 如果文件不存在,則創建,文件存在,則不創建
		File file = new File("file.txt");
		boolean b = file.createNewFile();
		System.out.println("b:" + b);
		
		boolean d = file.delete();
		System.out.println(d);

		File dirFile = new File("abc");
		boolean bDir = dirFile.mkdir();//創建目錄
		
		dirFile.delete();//刪除目錄
		System.out.println(bDir);
		
		dirFile = new File("abc\\ab\\a");
		dirFile.mkdirs();//創建多級目錄
		//刪除多級目錄需要迭代刪除,刪除一次只能刪除最裏面的一級目錄

		File file = new File("txt.txt");
		file.mkdir();//創建一個文件夾 名字爲txt.txt
		boolean b = file.exists();//文件是否存在
		System.out.println(b);
		//最好先判斷文件是否存在
		System.out.println(file.isFile());//是否是文件
		System.out.println(file.isDirectory());//是否是目錄

		File file1 = new File("txt.txt");//已經存在的文件
		File file2 = new File("txt1.txt");
		file1.renameTo(file2);//將txt.txt重命名爲txt1.txt
		
		File file3 = new File("D:\\1.txt");
		file2.renameTo(file3);//將txt1.txt剪切到D盤並重命名爲1.txt

		File[] fileList = File.listRoots();//列出可用的文件系統根(盤符)
		for (int i = 0; i < fileList.length; i++)
		{
			System.out.println(fileList[i]);
		}
		
		File file = new File("D:\\");
		System.out.println(file.getFreeSpace());//剩餘空
		System.out.println(file.getTotalSpace());//總空間
		System.out.println(file.getUsableSpace());//可用空間

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

	     /*
		 * 獲取當前目錄下的文件以及文件夾的名稱,包含隱藏文件
		 * 調用list方法的File對象中封裝的必須是目錄
		 * 否則會發生空指針異常
		 * 如果訪問的是系統級目錄也會發生空指針異常
		 * 如果目錄存在但是沒有內容,會返回一個長度爲0的數組。
		 * */
		File file = new File("C:\\");
		String[] list = file.list();//獲取當前目錄下所有的文件
		for (int i = 0; i < list.length; i++)
		{
			System.out.println(list[i]);
		}
public class Test
{
	public static void main(String[] args) throws Exception
	{
		fileList("E:\\",".jpg");
	}
	/**
	 * 遍歷某目錄下的某後綴的文件
	 * @param path 文件目錄
	 * @param suffix 後綴
	 */
	public static void fileList(String path,String suffix) 
	{
		File file = new File(path);
		String[] files = file.list(new Filter(suffix));
		for (int i = 0; i < files.length; i++) {
			System.out.println(files[i]);
		}
	}
}	
/**
 * 用於實現FilenameFilter接口的類的實例用於過濾文件名
 */
class Filter implements FilenameFilter
{
	String suffix;
	public Filter(String suffix) {
		this.suffix = suffix;
	}
	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(suffix);
	}
}

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

public class Test
{
	public static void main(String[] args) throws Exception
	{
		fileList("E:\\",".jpg");
	}
	
	/**
	 * 遍歷某目錄下的某後綴的文件
	 * @param path 文件目錄
	 * @param suffix 後綴
	 */
	public static void fileList(String path,String suffix) 
	{
		File file = new File(path);
		File[] files = file.listFiles(new Filter(suffix));
		for (int i = 0; i < files.length; i++) {
			System.out.println(files[i]);
		}
	}
}
/**
 * 用於實現FilenameFilter接口的類的實例用於過濾文件名
 */
class Filter implements FilenameFilter
{
	String suffix;
	public Filter(String suffix) {
		this.suffix = suffix;
	}
	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(suffix);
	}
}
public class Test
{
	public static void main(String[] args) throws Exception
	{
		fileList("D:\\");
	}
	/**
	 * 遍歷某目錄下的某後綴的文件
	 * @param path 文件目錄
	 */
	public static void fileList(String path) 
	{
		File file = new File(path);
		File[] files = file.listFiles(new Filter());
		for (int i = 0; i < files.length; i++) {
			System.out.println(files[i]);
		}
	}
}
/**
 * 實現FileFilter接口的類的實例用於過濾隱藏文件
 */
class Filter implements FileFilter
{
	@Override
	public boolean accept(File pathname) {
		
		return !pathname.isHidden();
	}
}

深度遍歷:對指定目錄進行所有內容的列出(包含字目錄的內容)

public static void main(String[] args)
	{
		File file = new File("D:\\JAVA_jar\\c3p0-0.9.5.2");
		//判斷此目錄是否存在
		boolean exists = file.exists();
		if(exists)//存在 
		{
			deepFile(file);
		}
	}
	/**
	 * 遍歷文件夾下所有的文件
	 * @param file 需要遍歷的路徑
	 */
	public static void deepFile(File file)
	{
		File[] files = file.listFiles();
		for (int i = 0; i < files.length; i++) {
			if(files[i].isDirectory())//是目錄 
			{
				deepFile(files[i]);
			}
			System.out.println(files[i]);
		}
	}

刪除一個帶內容的目錄

public static void main(String[] args)
	{
		File file = new File("D:\\c3p0-0.9.5.2");
		//判斷此目錄是否存在
		boolean exists = file.exists();
		if(exists)//存在 
		{
			removeDir(file);
		}
	}
	/**
	 * 刪除一個帶內容的目錄
	 * @param file 需要刪除的文件
	 */
	public static void removeDir(File file) 
	{
		File[] files = file.listFiles();
		for (File file2 : files) {
			if(file2.isDirectory()) 
			{
				removeDir(file2);
			}
			file2.delete();
		}
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章