1. 程式人生 > >java檔案輸入輸出流的例子

java檔案輸入輸出流的例子

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class InputStreamDemo {

	public static void main(String[] args) throws Exception {
		FileInputStream fis = new FileInputStream("PotPlayerSetup64.exe");
		FileOutputStream fos = new FileOutputStream("b.exe");

//		int data; // 按單個位元組讀,這種方法反覆的要操作磁碟讀寫操作,因此很慢
//		while ((data = fis.read()) != -1) {
//			fos.write(data);
//		}
//		System.out.println("copy finished");
		// 這種方法是一次就讀滿一個byte陣列,然後寫入,這樣將byte陣列設定大一點就可以
		// 減少讀取寫入的次數
//		byte[] bs = new byte[1024 * 1024];
//		int len = -1;
//		while ((len = fis.read(bs)) != -1) {
//			fos.write(bs, 0, len);
//		}
//		System.out.println("copy finished");

		// 使用bufferedinputstream把fis裝進去,這樣也能減小磁碟的讀寫操作次數
		// 原理是bis內部會有一個緩衝區,緩衝區的大小為8192個位元組,當對bis讀取時,
		// 首先bis從磁盤獲取8192個位元組的內容,然後再將讀取的位元組返回給bis.read
		// 這種方法相比於fis.read(byte)來說,當byte陣列比較大時,fis.read(byte)
		// 會快,因為buffered的讀寫是要操作兩個陣列,讀一個緩衝區,寫也有一個緩衝區
		// 而fis.read(byte)只對一個數組進行操作
		BufferedInputStream bis = new BufferedInputStream(fis);
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		int b;
		while ((b = bis.read()) != -1) {
			bos.write(b);
		}
		System.out.println("copy finished");
		bis.close();
		bos.close();
		fis.close();
		fos.close();

	}
}

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderDemo {
	static String read(String filename) throws IOException {
		// FileReader繼承了Reader這個類,這個類用於字元流,再在外面加一個
		// BufferedReader,其實也是取到一個起到一個緩衝的作用
		BufferedReader bReader = new BufferedReader((new FileReader(filename)));
		String s = null;
		StringBuilder sb = new StringBuilder();
		while ((s = bReader.readLine()) != null) {
			sb.append(s + '\n');
		}
		bReader.close();
		return sb.toString();
	}

	public static void main(String[] args) throws IOException {
		System.out.println(read("inputfile.txt"));
	}

}