1. 程式人生 > 程式設計 >JAVA中的File類與IO流

JAVA中的File類與IO流

1.File類

java檔案類以抽象的方式代表檔名和目錄路徑名.該類主要用於檔案和目錄的建立,檔案的查詢和檔案的刪除等.File物件代表磁碟中實際存在的檔案和目錄.

1.File的構造方法主要有:

File(File parent,String child)
複製程式碼

通過給定的父抽象路徑名和子路徑字串建立一個新的File例項

File(String pathname)
複製程式碼

通過將給定路徑字串轉換成抽象路徑來建立一個新的File例項

File(String parent,String child)
複製程式碼

通過parent路徑名字串和child路徑名字串來建立一個新的File例項 2.File類中一些方法:

public String getName()  返回此抽象路徑名錶示的檔案或目錄的名稱
public String getParent()  返回此抽象路徑名的父路徑名的路徑名字串,如果此路徑名沒有指定父目錄,則返回null
public File getParentFile()  返回此抽象路徑名的父路徑名的抽象路徑名,則返回null
public String getPath()將此抽象路徑名轉換為路徑名字字串
public boolean isAbsolute()  測試此抽象路徑名是否為絕對路徑名
public String getAbsolutePath()  返回抽象路徑名的絕對路徑名字串
複製程式碼

更多方法可見API檔案 注意:File提供的功能都是操作檔案外部的能力,沒有辦法操作檔案內部的內容,想要對檔案內容進行操作,還需要流,即Stream.

2.IO流-----Stream

一個流可以理解為一個資料的序列.輸入流表示從一個源讀取資料,輸出流表示向一個目標寫資料,Java 為 I/O 提供了強大的而靈活的支援,使其更廣泛地應用到檔案傳輸和網路程式設計中.

1.流的分類

按照流向:

輸入流 輸出流

按照操作單元:

位元組流:萬能流:任何內容都可以轉為位元組,可以傳輸文字,圖片,音訊... 字元流:只能操作 純文字資料

按照功能:

節點流: 包裹源頭,實現基本功能 功能流: 對節點流增強效能,提高效率

2.位元組流

先看位元組流,位元組流分為位元組輸入流和位元組輸出流.

  • 位元組輸入流:InputStream------>抽象類 此抽象類是表示位元組輸入流的所有類的超類
  • 位元組輸出流:OutputStream------>抽象類 此抽象類是表示位元組輸出流的所有類的超類
  • 檔案位元組輸入流:FileInputStream----->從檔案系統中的某個檔案中獲得輸入位元組
  • 檔案位元組輸出流:FileOutputStream----->輸出程式中的位元組 流使用完畢,應該關閉.關閉可使用close()方法 寫入時,最後應該呼叫flush()方法刷出流管道中剩餘的資料.

下面以一次複製操作為例.對於一個複製操作應該有這樣幾步:

準備流,即宣告且例項化檔案字元流物件

讀入寫出資料,利用read(),write()方法實現讀寫

刷出,最後把管道中的資料刷出

關閉流,注意應該後開啟的先關閉

示例1:

    public class Test{
        public static void main(String []args){
            String src="E:/skr.txt";//原始檔
            String dest="E:/skr1.txt";//複製後得到的檔案
            byteCopy(src,dest);
        }
        //方法過載
        public static void byteCopy(String src,String dest){
	        byteCopy(new File(src),new File(dest));
        }
        //方法過載
        public static void byteCopy(File input,File output) {
        	InputStream in = null;//輸入位元組流宣告
        	OutputStream os = null;//輸出位元組流宣告
        	try {
	        	in = new FileInputStream(input);//多型
	        	os = new FileOutputStream(output);//多型
	        	//定義一個1k的位元組陣列,一次讀取1k的資料
	        	byte[] b = new byte[1024];
	        	//當檔案中沒有資料時,返回-1
	        	int len=-1;
	        	while(-1!=(len=in.read(b))){//讀取
		        	os.write(b,0,len);//寫入
	        	}
	        	os.flush();//刷出
            } catch (FileNotFoundException e) {
		        e.printStackTrace();
	        } catch (IOException e) {
	        	e.printStackTrace();
	        } finally {
	            //後開啟的流先關閉
	        	try {
		        	if (os != null) {
			        	os.close();
		        	}
		        	if (in != null) {
		    	    	in.close();
		        	}
	           	} catch (IOException e) {
		        	e.printStackTrace();
	        	}
        	}
    	}
    }
複製程式碼

3.字元流

字元流同樣分為字元輸入流和字元輸出流

字元輸入流:Reader--->讀取字元流的抽象類

FileReader 用來讀取字元檔案的便捷類

字元輸出流:Writer--->寫入字元流的抽象類

FileReader 用來讀取字元檔案的便捷類

字元流只能操作純文字的檔案.

4.緩衝流

緩衝流是一個功能流,它可以增強功能,提高效能,加快讀寫效率.

1. 位元組緩衝流:

  • BufferedInputStream 位元組輸入流緩衝流

  • BufferedOutputStream 位元組輸出流緩衝流

沒有新增方法,可以發生多型使用

2. 字元緩衝流

BufferedReader  字元輸入流緩衝流  新增方法:String readLine()讀取一個文字行

BufferedWriter  字元輸出流緩衝流  新增方法:void newLine() 寫入一個行分隔符
複製程式碼

複製程式碼

3. 緩衝流的例項化與普通節點流的例項化有所不同:

以位元組輸入緩衝流為例看一下構造方法: BufferedInputStream(InputStream in) 複製程式碼 可以看到構造方法中傳入的是一個位元組輸入流的物件 即BufferedInputStream的構造方法中傳入的不再是檔案的抽象路徑名字串或抽象路徑名.

3.總結

我們可以利用File類中提供的方法對檔案的外部進行操作,但是當我們想操作檔案的內容時就需要使用Stream. 在java中有大量而靈活地操作可以進行處理檔案. 我們可以選擇位元組流或者字元流處理檔案.當檔案較大時,也可以使用緩衝流提高效能,增加讀寫效率.