J2SE(十六)Java之I/O

前言

        說到Java IO,不得不提到的就是流(Stream)的概念。流的概念源於UNIX中管道(pipe)的概念,它是一組有順序的,有起點和終點的字節集合,是對數據傳輸的總稱或抽象。即數據在兩設備間的傳輸稱爲流,流的本質是數據傳輸,根據數據傳輸特性將流抽象爲各種類,方便更直觀的進行數據操作。

I/O分類

Java中定義了多種不同流的類型來實現輸入和輸出功能,可以從不同的角度對其進行分類:
(1)根據數據流向不同分爲:輸入流和輸出流
(2)根據處理數據類型的不同分爲:字符流和字節流
(3)根據功能的不同分爲:節點流和處理流
一、輸入流、輸出流:
         輸入輸出流是從內存的角度劃分的,數據從內存到硬盤,通常認爲是輸出流,即寫操作,從硬盤到內存,通常認爲是輸入流,即讀操作,Java的輸入流主要有InputStream和Reader作爲基類,而輸出流則主要由OutputStream和Writer作爲基類。
二、字符流、字節流:
         字節流和字符流區別非常簡單,它們的用法幾乎一樣。區別在於字節流和字符流所操作的數據單元不同:字節流操作的最小單元數據是8位字節,而字符流作爲最小數據單元是16爲字節。字節流主要由InputStream、OutputStream作爲基類,而字符流則主要由Reader和Writer作爲基類完成。
三、節點流、處理流:
        可以從、向一個特定的IO設備,讀寫數據流,稱爲節點流,節點流常常也被常務低級流(Low Level Stream),處理流則用於對一個已經存在的流進行連接封裝,通過封裝後來實現數據的讀寫功能。處理流稱爲高級流。
       當用處理流的進行輸入、輸出時,程序並不會直接連接到實際數據源,沒有和實際的輸入、輸出節點連接。使用處理流一個明顯的好處是:只要使用相同的處理流,程序就可以採用相同的輸入、輸出代碼來訪問不同數據源,隨着處理流鎖包裝節點流的改變,程序實際所訪問的數據源也相應發生改變。
處理流的功能主要體現在兩個方面:
(1)性能提高:主要以增加緩衝方式來提高輸入、輸出的效率
(2)操作的便捷:處理流可能提供了系列便捷的方法來一次性輸入、輸出大批量的內容,而不是輸入、輸出一個或多個單位數據。
處理流可以“嫁接”在任何已經存在的流的基礎上,這就允許Java應用程序採用相同的代碼、透明的方式來訪問不同的輸入、輸出設備輸入流。
  字節流 字符流
輸入流 InputStream Reader
輸出流 OutputStream Writer

IO體系:

下面來看幾個例子

//InputStream讀文件
	public void readFileByInputStream(String fileName){
		try {
			int b=0;
			InputStream in=new FileInputStream(fileName);
			while ((b=in.read())!=-1) {
				System.out.println(b);
			}
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//FileReader讀文件
	public void readFileByFileReader(String fileName){
		try {
			int b=0;
			FileReader reader=new FileReader(fileName);
			while ((b=reader.read())!=-1) {
				System.out.println(b);
			}
			reader.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//寫文件
	public void writeByOutPutStream(String fileName,String targetFile){
		int b=0;
		InputStream in;
		try {
			in = new FileInputStream(fileName);
			OutputStream out=new FileOutputStream(targetFile);
			while ((b=in.read())!=-1) {
				out.write(b);
			}
			in.close();
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	//寫文件
	public void writeByFileWriter(String fileName,String targetFile){
		int b=0;
		FileReader reader;
		try {
		    reader=new FileReader(fileName);
			FileWriter out=new FileWriter(targetFile);
			while ((b=reader.read())!=-1) {
				System.out.println(out.getEncoding());
				out.write((char)b);
			}
			reader.close();
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章