1. 程式人生 > 其它 >java io學習筆記(一)

java io學習筆記(一)

技術標籤:java

整理一下java io的相關學習筆記,也方便自己溫故知新…

package io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 流  java標準的IO操作
 * 使用流我們可以以同一的方式讀寫一切裝置。
 * 
 * java將流按照讀寫功能分為:
 * 輸入流:用於從外界讀取資料到程式中      (負責讀操作)
 * 輸出流:用於將資料從程式中寫出到外界  (負責寫操作)
 * 
 * java.io.InputStream是所有位元組輸入流的超類
 * java.io.OutputStream是所有位元組輸出流的超類
 * 它們規定了所有流都必須具備的讀或寫操作。因此無論讀寫
 * 什麼裝置的流,讀寫方法都是一樣的。
 * 
 * java將流分為節點流和處理流兩大類:
 * 節點流:又稱為低階流,是實際連線程式與另一端的"管道",
 * 負責實際讀或寫資料的流。讀寫操作一定是建立在節點流的
 * 基礎上進行的。
 * 
 * 處理流:又稱為高階流,不能獨立存在,必須連線在其他流上
 * 目的是當資料流經當前處理流時可以對資料進行某種加工處理
 * 操作,簡化我們對資料的相關操作。
 * 
 * 檔案流:
 * 檔案流是一對低階流,用於讀寫檔案。
 * 
 * 檔案流與RandomAccessFile都是用來讀寫檔案資料的,雖然
 * 讀寫方法定義都相同(read,write方法)但是底層實際的讀寫
 * 形式完全不同。
 * 檔案流是基於java標準IO對檔案進行資料讀寫的,而流的讀寫
 * 形式為【順序讀寫】,即:讀或寫操作只能順序向後,不可回退。
 * RAF是基於指標的隨機讀寫形式,可以操作指標對檔案任意位置
 * 進行讀寫。
 * 所以檔案流做不到對檔案任意位置編輯操作,但是基於流連線
 * 可以輕鬆完成RAF不容易辦到的事情。
 * 
 * 流連線:使用流讀寫時,串聯若干的高階流,並最終串聯到某個
 * 低階流對某裝置進行讀寫操作的過程。
 * 流連線也是IO的精髓。
 * 
 * 
 * 
 * @author Administrator
 *
 */
public class FosDemo {
	public static void main(String[] args) throws IOException {
		/*
		 * File提供的構造方法:
		 * FileOutputStream(File file)
		 * FileOutputStream(String path)
		 * 以上形式建立檔案輸出流時,若指定的檔案已經存在
		 * 那麼流建立時會先將該檔案資料全部清除。所以這種
		 * 方式為覆蓋寫模式。
		 * 
		 */
//		FileOutputStream fos
//			= new FileOutputStream("fos.txt");
		/*
		 * 如果建立時再傳入一個boolean值型別的引數,那麼
		 * 當前檔案輸出流就變為了追加模式,即:若檔案已存
		 * 在則資料全部保留,通過流寫出的內容會被追加到
		 * 檔案末尾。
		 */
		FileOutputStream fos
			= new FileOutputStream("fos.txt",true);
		String str = "好嗨哦~感覺人生已經到達了高潮~";
		byte[] data = str.getBytes("UTF-8");
		fos.write(data);
		fos.write("感覺人生已經到達了巔峰~".getBytes("UTF-8"));
		System.out.println("寫出完畢!");	
		fos.close();
	}
}

下面的程式碼實現了複製的功能

package io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 使用檔案流完成檔案的複製操作 
 * @author Administrator
 *
 */
public class CopyDemo {
	public static void main(String[] args) throws IOException {
		/*
		 * 流程:
		 * 1:建立檔案輸入流讀取原檔案
		 * 2:建立檔案輸出流向複製檔案寫
		 * 3:迴圈從原檔案讀取一組位元組並寫入到複製檔案中
		 *   完成複製操作
		 * 4:關閉兩個流  
		 */
		FileInputStream fis
			= new FileInputStream("music.mp3");		
		FileOutputStream fos
			= new FileOutputStream("music_cp2.mp3");
		
		byte[] data = new byte[1024*10];
		int len = -1;		
		while((len = fis.read(data))!=-1) {
			fos.write(data,0,len);
		}
		System.out.println("複製完畢!");
		fis.close();
		fos.close();
		
	}
}