Java檔案的讀寫操作

2020-08-11 22:48:40

File類概述

Java語言中File類是唯一表示檔案物件和目錄物件的數據型別。在Java語言中檔案路徑分隔符使用‘/’或‘\\’(‘\\’中兩個斜線分別代錶轉譯字元和分隔符)
檔案可以儲存位元組或字元;目錄不能直接儲存位元組或字元,只能儲存檔案後子目錄。
檔案可以被讀取和寫入,而目錄不能執行讀寫操作,只能建立,刪除及獲取其中包含的子目錄及檔案。
對於檔案 和目錄通常要嚴格區分,File類提供方法可以判斷此File物件是檔案還是目錄。

File類物件的建立(建立檔案物件)

  • File(File dir,String child):根據parent抽象路徑名和child路徑名字串建立一個新File範例
  • File(String pathName):通過將給定路徑字串轉換爲抽象路徑名來建立一個新的File範例(僅可建立檔案物件,若目錄不存在不會建立目錄)
  • File(String parent,String child):根據parent路徑名字串和child路徑名字串建立一個 新File範例(與第一個類似,區別在於第一個需要給定一個File的範例物件作爲參數)
  • File(URL uri):通過給定的file:URI轉化爲一個抽象路徑名來建立一個新的File範例(URI是Java已有的類,該物件表示一個檔案路徑)
    抽象路徑可以由自己建立的路徑名,可以存在也可以不存在,如果不存在在建立檔案時需要 先呼叫mkdir否則系統找不到指定路徑
		/*
		 * 通過將給定路徑字串轉換爲抽象路徑名來建立檔案物件
		 */
		String pathName = "d:/one.txt";
		File file = new File(pathName);
		System.out.println(file == null);//無論給定的檔案虛擬路徑是否存在,file一定不是空的。建立檔案物件!=該檔案在硬碟中儲存
		/*
		 * 根據parent抽象路徑名和child路徑名字串建立一個新File範例
		 */
		File file2 = new File(new File("d:/"),"two.txt");
		
		/*
		 * 根據parent路徑名字串和child路徑名字串建立一個 新File範例
		 */
		File file3 = new File("d:/","three.txt");
		
		/*
		 * 通過給定的file:URI轉化爲一個抽象路徑名來建立一個新的File範例
		 */
		URI uri = URI.create("file:/d:/four.txt");//建立URI物件時,路徑前需要加上file:/
		File file4 = new File(uri);

File類常用方法

  • public boolean canWrite():判斷是否能修改該檔案
  • public boolean canRead():判斷是否能讀取該檔案
  • public boolean createNewFile() throws IOException():建立一個新檔案,判斷是否建立成功
  • public boolean delete():刪除此檔案,並判斷是否刪除成功
  • public boolean exist():判斷檔案是否存在(在硬碟上儲存,而非該物件是否存在)
		/*
		 * 建立檔案物件
		 */
		String path = "d:/one.txt";
		File file = new File(path);
		
		/*
		 * 判斷檔案是否存在
		 */
		System.out.println(file.exists());//輸出結果爲false,因爲僅僅建立了檔案物件,並沒有在硬碟上儲存該檔案
		
		/*
		 * 建立一個新檔案
		 */
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(file.exists());//此時輸出結果爲true
		
		/*
		 * 判斷檔案能否修改與讀取
		 */
		System.out.println(file.canRead());//判斷檔案是否能正常讀取
		System.out.println(file.canWrite());//判斷檔案是否能正常修改
		
		/*
		 * 刪除檔案
		 */
		file.delete();
		System.out.println(file.exists());//刪除後輸出爲false
  • public String getAbsolutePath():獲取整個檔案的絕對路徑
  • public String getName():獲取檔名
  • public String getParent():獲取檔案的父目錄
  • public String getPath():獲取構造檔案時的路徑
  • public bolean isDirectory():判斷是否是目錄
  • public boolean isFile():判斷是否是檔案
  • public File[] listFiles():獲取當前目錄下所有檔案組成的File陣列
  • public boolean mkdir():建立目錄並判斷是否建立成功,只能建立一級目錄
  • public boolean mkdirs():建立目錄並返回i是否建立成功,可以建立一級或多級目錄
		/*
		 * 建立檔案物件
		 */
		String pathName = "d:/one.txt";
		File file = new File(pathName);
		
		/*
		 * 建立一個新檔案
		 */
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		/*
		 * 獲取檔案路徑
		 */
		String absolutePath = file.getAbsolutePath();//預設絕對路徑,從磁碟名到檔名的全路徑
		String path = file.getPath();//預設相對路徑,得到的是構造file時的路徑
		
		/*
		 * 獲取檔名
		 */
		String name = file.getName();//結果:one.txt
		
		/*
		 * 獲取父目錄
		 */
		String parent = file.getParent();//結果:d:/
		
		/*
		 * 判斷是目錄還是檔案
		 */
		file.isFile();//結果:true
		file.isDirectory();//結果:false
		
		/*
		 * 建立目錄
		 */
		File file2 = new File("d:/one");
		file2.mkdir();//返回true
		File file3 = new File("d:/1/2");
		file3.mkdir();//返回false
		file3.mkdirs();//返回true
		
		/*
		 * 獲取目錄下所有檔名
		 */
		File file4 = new File("d:/a");
		file4.mkdir();
		for(int i=1;i<=10;i++) {
			File file5 = new File("d:/a/"+i);
			try {
				file5.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}//以上爲建立即將提取的目錄
		File []files = file4.listFiles();//獲取檔案陣列
		for(File f:files) {
			System.out.print(f.getName()+" ");
		}

文中相似方法對比簡析

  1. 構造器File(File dir,String child)與File(String parent,String child):區別在於後者父路經以字串爲參數轉換而前者是已存的File物件的抽象路徑
  2. 獲取檔案路徑方法public String getPath()與public String getAbsolutePath():區別在於前者獲取的是構造物件的檔案路徑,如果構造物件的路徑爲全路徑則得到全路徑,即預設相對路徑;而後者任何情況都獲取全路徑,及預設絕對路徑
  3. 建立目錄方法public boolean mkdir()與public boolean mkdirs():區別在於前者只能建立一級目錄,在建立多級目錄時返回值爲false,而後者可以建立一級或者多級目錄