FIle類與IO流

java.io.File類是系統自帶的類,可以對文件進行創建,刪除,查找,判斷等操作。

 

1.文件的概念

(1)文件名,文件名包括文件本身名稱和擴展名,擴展名並不影響文件本身 ,他只是可以使文件有一個默認的打開方式,並不影響文件本身。

(2)文件格式,文件的格式是把一個文件通過不同的順序或方法或形式存儲起來的文件。跟打開方式相對應,每一種文件格式都有一種自己的打開方式,根據自己的順序和方法和形式依次將文件呈現出來。一般用擴展名加以識別。

(3)文件分爲目錄文件和真實文件兩種。

 

2.File file = new File(namepath);//在namepath目錄下創建對象

   file.createNewFile();  //利用對象創建一個實際的File文件
   boolean bool = file.exists();   //判斷file文件是否存在,並把結果返回
   if(bool){
	//如果文件是個目錄
	if(file.isDirectory){
		System.out.println("文件是個目錄");
		}
	//日過文件是個真實的文件
	else if(file.isFile){
		System.out.println("文件是個真實文件");		
		}
	}
   //如果文件不存在
   else{
	System.out.println("創建文件失敗");
	}
 

以上是一個文件的基本處理方式,他反應了文件在程序中的處理方法,所以,操作系統對文件的處理不過是這樣的一種方式的形象化。

 

3.利用遞歸遍歷文件目錄中的所有文件。

  遞歸思想是一種很重要的思想,因爲有時候我們不知道循環需要什麼時候結束,並且每一次都是想通規律是,就可以利用遞歸。

private int countFile(String path) {
		int count = 0; 
		//根據地址實例化文件
		File file = new File(path);
		//把文件的子文件用數組存儲起來
		File[] lf = file.listFiles();
		//判斷   即遞歸循環出口
		if(lf==null||lf.length==0){
			return 0;
		}
		//用循環找出文件個數
		for(int i=0;i<lf.length;i++){
			//如果是文件目錄就進行深沉遞歸
			if(lf[i].isDirectory()){
				count += countFile(lf[i].getAbsolutePath());
			}
			//如果是文件名就直接打印出來
			else if(lf[i].isFile()||file.isHidden()){
				count++;
				ta.append("文件位置爲"+lf[i].getAbsolutePath()+"\n");
			}
		}
		return count;
	}
 

IO流的解釋:

對文件的讀取與複製等功能,則要用到流的概念。

java中有IO,輸入輸出流:可以把一個文件的內容讀出來,也可以把內容寫入一個文件。

1.InputStream和OutputStream是最小的數據單位的流,一個字節爲一個單位。

2.BufferedInputStream和BufferedOutputStream提供緩衝的緩衝流。

3.DataInputStream和DataOutputStream是基於具體數據的流。

4.ObjectInputStream和ObjectOutputStream是基於對象的流。

以上流從小到大,需要上一級的支持才能使用,比如未創建字節流,就無法創建緩衝流,緩衝流的創建以字節流對象爲參數,依次類推。

如:

//創建文件輸入流對象 爲了方便統一,將其轉化爲父類對象

	InputStream IS = new FileInputStream(file);
	//根據字節流創建輸入緩衝流
	BufferedInputStream bis = new BufferedInputStream(IS);
	//根據緩衝流創建數據流
	DataInputStream dis = new DataInputStream(bis);
	//根據數據流創建對象流
	ObjectInputStream ois = new ObjectInputStream(dis);
 

這樣一級一級往上創建。

這些InputStream都有讀取的方法可以讀取文件內容,相應的OutputStream也有對應的方法寫入內容:

private void copyFile(String path, String newpath) {
		// TODO Auto-generated method stub
		//根據地址創建文件
		File file = new File(path);
		File newfile = new File(newpath);
		try {
			//創建輸入流對象
			InputStream IS = new FileInputStream(file);
			//創建輸出流對象
			OutputStream OS = new FileOutputStream(newfile);
			//構造輸入緩衝流
			BufferedInputStream bis = new BufferedInputStream(IS);
			//構造輸出緩衝流
			BufferedOutputStream bos = new BufferedOutputStream(OS);
			//求出文件長度
			int length = bis.available();
			byte[] arriy = new byte[length];
			//把文件讀入到固定的數組中去
			bis.read(arriy);
			//將數組內容轉化成字符串
			String str = new String(arriy);
			//將數組內容讀入到指定文件時
			bos.write(arriy);
			//關閉各種流
			bos.close();
			OS.close();
			bis.close();
			IS.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 

這樣就就實現了一個基本的複製功能,其實IO也就是用於數據的傳輸,只要需要讀寫的地方,就會用到IO着一塊,以上其實也是IO中的一些方法的調用,值得注意的是,各種流在創建過後,最後一定要記得關閉,否則會有一部分文件依然在緩存中未被寫入。


發佈了28 篇原創文章 · 獲贊 0 · 訪問量 3363
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章