1. 程式人生 > >Java IO操作——檔案操作類File的使用

Java IO操作——檔案操作類File的使用

 學習目標

掌握File類的使用 可以使用File類中的方法對檔案進行操作。 在整個Java的學習中,個人感覺學習較為困難的地方就是IO,因為整個IO是非常龐大的,而且有很多操作的類。每個類都有各自的特點。如果面向物件各個概念都非常清楚的話,則學習此塊知識會比較容易些。   所有的IO操作都儲存在java.io包中。

File類

在整個io包中,唯一表示與檔案本身有關的類就是File類。使用File類可以進行建立或刪除檔案以及資料夾等常用操作。要想使用File類,則首先要觀察File類的構造方法,此類的常用構造方法如下所示: public File(String pathname):例項化File類的時候,必須設定好路徑。直接根據路徑找到檔案。
File類中的主要方法和常量: 1、public static final String pathSeparator 常量 表示路徑的分隔符(windows是:";") 2、public static final String separator       常量  表示路徑的分隔符(windows是:"\") 3、public File(String pathname)  構造方法 建立File類物件,傳入完整路徑 4、public boolean createNewFile() throws IOException  普通方法  建立新檔案 5、public boolean delete()
 普通方法 刪除檔案
6、public boolean exists()   普通方法 判斷檔案是否存在 7、public boolean isDirectory() 判斷給定的路徑是否是一個目錄 8、public long length()   普通方法  返回檔案的大小 9、public String[] list() 普通方法 列出指定目錄的全部內容,只是列出了名稱 10、public File[] listFiles() 普通方法 列出指定目錄的全部內容,會列出路徑 11、public boolean mkdir() 普通方法 建立一個目錄 12、public boolean removeTo(File dest)
為已有的檔案重新命名

建立一個新檔案

建立檔案:public boolean createNewFile() throws IOException 使用以上的方法就可以建立檔案了 假設:現在要在d盤建立一個test.txt的檔案。
import java.io.File ;
import java.io.IOException ;
public class FileDemo01{
	public static void main(String args[]){
		File f = new File("d:\\test.txt") ;		// 例項化File類的物件
		try{
			f.createNewFile() ;		// 建立檔案,根據給定的路徑建立
		}catch(IOException e){
			e.printStackTrace() ;	// 輸出異常資訊
		}
	}
};
以上已經完成了檔案的建立功能,但是如果開發的時候按照以上的格式編寫,則肯定會出錯誤。 因為在各個作業系統中,實際上路徑的分隔符是不一樣的,例如: windows中使用反斜槓:"\" Linux中使用正斜槓:"/" 如果想讓Java程式的可移植性繼續保持,則最好根據所在的作業系統來自動使用分隔符。 如下所示:
import java.io.File ;
import java.io.IOException ;
public class FileDemo02{
	public static void main(String args[]){
		System.out.println("pathSeparator:" + File.pathSeparator) ;	// 呼叫靜態常量
		System.out.println("separator:" + File.separator) ;	// 呼叫靜態常量
	}
};
如果要想讓Java程式繼續保持可移植性,那麼在編寫路徑的時候就應該使用File類中的常量,修改之前的程式如下所示:
import java.io.File ;
import java.io.IOException ;
public class FileDemo03{
	public static void main(String args[]){
		File f = new File("d:"+File.separator+"test.txt") ;		// 例項化File類的物件
		try{
			f.createNewFile() ;		// 建立檔案,根據給定的路徑建立
		}catch(IOException e){
			e.printStackTrace() ;	// 輸出異常資訊
		}
	}
};

刪除一個指定的檔案

在File類中使用以下方法就可以刪除檔案: public boolean delete()   將之前建立好的檔案刪除掉:
import java.io.File ;
import java.io.IOException ;
public class FileDemo04{
	public static void main(String args[]){
		File f = new File("d:"+File.separator+"test.txt") ;		// 例項化File類的物件
		f.delete() ;	// 刪除檔案
	}
};
此時,檔案確實被刪除掉了,但是最好的做法不能直接刪除而是在刪除檔案前判斷一下檔案是否存在,如果存在再執行刪除操作。 在File類中可以使用exists()方法判斷一個檔案是否存在。 public boolean exists() 使用以上的程式碼增強之前的程式。程式碼如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo05{
	public static void main(String args[]){
		File f = new File("d:"+File.separator+"test.txt") ;		// 例項化File類的物件
		if(f.exists()){	// 如果檔案存在則刪除
			f.delete() ;	// 刪除檔案
		}
	}
};

綜合建立、刪除檔案的操作

 假如現在有如下要求:   給定一個路徑,如果此檔案存在,則刪除,如果檔案不存在,則建立一個新的檔案 程式程式碼如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo06{
	public static void main(String args[]){
		File f = new File("d:"+File.separator+"test.txt") ;		// 例項化File類的物件
		if(f.exists()){	// 如果檔案存在則刪除
			f.delete() ;	// 刪除檔案
		}else{
			try{
				f.createNewFile() ;		// 建立檔案,根據給定的路徑建立
			}catch(IOException e){
				e.printStackTrace() ;	// 輸出異常資訊
			}
		}
	}
};
從程式的執行結果中可以發現,所有的操作並不會立即執行。因為JAVA是通過JVM與底層進行互動的,所以所有的操作需要經過JVM完成,那麼就有可能產生延遲。 提示:對於檔案的字尾是可有可無的。

建立一個資料夾

使用mkdir()方法建立一個資料夾。 public boolean mkdir()  建立資料夾操作,例項程式碼如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo07{
	public static void main(String args[]){
		File f = new File("d:"+File.separator+"mldn") ;		// 例項化File類的物件
		f.mkdir() ;	// 建立資料夾
	}
};

列出指定目錄的全部檔案

如果現在給出了一個目錄,則可以直接列出目錄中的內容。但是列出的方法在File類中存在兩個。  以字串陣列的形式返回:public String[] list()  以File陣列的形式返回:public File[] listFiles() 操作一:使用list()列出全部內容 程式程式碼如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo08{
	public static void main(String args[]){
		File f = new File("d:"+File.separator) ;		// 例項化File類的物件
		String str[] = f.list() ;	// 列出給定目錄中的內容
		for(int i=0;i<str.length;i++){
			System.out.println(str[i]) ;
		}
	}
};

以上只是列出了全部的名字,包括資料夾的名字或是檔案的名字等 操作二:使用listFiles()列出 程式程式碼如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo09{
	public static void main(String args[]){
		File f = new File("d:"+File.separator) ;		// 例項化File類的物件
		File files[] = f.listFiles() ;	// 列出全部內容
		for(int i=0;i<files.length;i++){
			System.out.println(files[i]) ;
		}
	}
};

判斷一個給定的路徑是否是目錄

在File類中直接使用:public boolean isDirectory() 給定路徑,判斷是否是目錄 程式程式碼如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo10{
	public static void main(String args[]){
		File f = new File("d:"+File.separator) ;		// 例項化File類的物件
		if(f.isDirectory()){	// 判斷是否是目錄
			System.out.println(f.getPath() + "路徑是目錄。") ;
		}else{
			System.out.println(f.getPath() + "路徑不是目錄。") ;
		}
	}
};

要求:列出指定目錄中的全部內容

如果給定了一個目錄,則要求將此目錄中的全部檔案都列出來,但是列的時候還會存在子資料夾。 分析如下:
應該採用遞迴的呼叫形式:
import java.io.File ;
import java.io.IOException ;
public class FileDemo11{
	public static void main(String args[]){
		File my = new File("d:" + File.separator) ;	// 操作路徑
		print(my) ;
	}
	public static void print(File file){	// 遞迴呼叫
		if(file!=null){	// 判斷物件是否為空
			if(file.isDirectory()){	// 如果是目錄
				File f[] = file.listFiles() ;	// 列出全部的檔案
				if(f!=null){	// 判斷此目錄能否列出
					for(int i=0;i<f.length;i++){
						print(f[i]) ;	// 因為給的路徑有可能是目錄,所以,繼續判斷
					}
				}
			}else{
				System.out.println(file) ;	// 輸出路徑
			}
		}
	}
};


總結: 1、File類是在java.io包中唯一與檔案本身有關的。 2、可以使用File類建立、刪除等常見的檔案操作。 3、在使用File類指定路徑的時候一定要注意作業系統之間的差別,儘量使用separator進行分割。