javaIO基礎

流是什麼
簡單的說:流是字節從源到目的地運行的軌跡。
次序是有意義的,字節會按照次序進行傳遞。java

 

在java.io包中,有一些流是結點流,即它們能夠從一個特定的地方讀寫。
列如磁盤或者一塊內存。其它流稱做過濾器。一個過濾器輸入流是用一個到已存在的輸入流的鏈接建立的。此後,當你試圖從過濾輸入流對象讀時,他向你提供來自另外一個輸入對象的字符編程


IO包中的基本流類
在java.io包中定義了一些流類。下圖代表了包中的類層次。一些更公共的類將在後面介紹。數組


IO包中基本流類緩存

InputStream:
1.SequenceInputStream   順序
2.PipedInputStream	管道(必須掌握)
3.FilterInputStream	過濾器(必須掌握)
1.DataInputStream	
2.PushbackInputStream	回推
3.BufferedInputStream	緩存(必須掌握)

4.ObjectInputStream	(必須掌握)
5.ByteArrayStream	字節數組(必須掌握)
6.FileInputStream

FileInputStream和FileOutputStream
這些類是結點流,並且正如這個名字所暗示的那樣,他們使用磁盤文件。
這些類的構造函數容許你所指定他們所鏈接的文件。要構造一個FileInputStream,所關聯的文件必須存在並且是可讀的,
若是你要構造一個FileOutputStream而輸出文件已經存在,則他將被覆蓋函數

BufferInputStream和BufferOutputStream
這些是過濾器流,他們能夠提升i/o操做的效率this

DataInputStream和DataOutputStream
DataInputStream方法
byte readByte
long readLong
double readDouble
DataOutputStream方法
void writeByte(byte)
void writeLong(long)
void writeDouble(double)

注意DataInputStream和DataOutputStream的方法是成對的
這些流都有讀寫字符串的方法,但不該當使用這些方法,他們已經被後面所討論的讀者和做者所去取代線程

PipedInputStream和PipedOutputStream
管道流用來在線程進行通訊。一個線程的PipedInputStream對象從另外一個線程的PipedOutStream對象
讀取輸入。用使管道流有用,必須有一個輸入方和一個輸出方code

SequenceInputStream:容許你鏈接多個InputStream流,簡單示例以下:
public static void mian(String args[]) throws Exception{
	InputStream in1 = new FileInputStream("D:/temp/a.txt");
	InputStream in2 = new FileInputStream("D:/temp/b.txt");

	SequenceInputStream sin = new SequenceInputStream(in1,in2);
	
	int c = 0;
	while((c=sin.read())!=-1){
		System.out.print((char) c);
	}

	in1.close();
	in2.close();
	sin.close();
	


}

InputStream方法
三個read方法
int read()
int read(byte [])
int read(byte[],int,int)
這三個方法提供對輸入管道數據的存取。簡單讀方法返回一個ini值,他包含從流李
讀出一個字節或者-1,其中後者代表文件結束。其它兩種方法將數據讀入到字節數組中,並返回所讀的字節數。
第三個方法中的兩個int參數指定了所要填入的數組的子範圍對象

void close()
你完成流操做以後,就關閉這個流,若是你有一個流所組成的棧,使用過濾器流,
就關閉棧頂部的流。這個關機操做會關閉其他的流。ip

OutputStream方法
三個基本的write()方法
void write(int)
void write(byte [])
void write(byte [],int, int)
這些方法寫輸出流,和輸入同樣,老是嘗試以實際最大的塊進行寫操做。

void close()
當你完成寫操做後,就關閉輸出流。若是你有一個流所組成的棧,就關閉棧頂部的流。
這個關閉操做會關閉其他的流。

void flush()
有時一個輸出流在積累了若干次以後才進行真的的寫操做。flush()方法容許你的強制執行寫操做。


IO流編程的基本模型
1.構建源和目的地的鏈接
2.從源輸出流
3.目的地接受流
4,關閉鏈接

 

例子:
package com;

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

public class FileIO {
	public void writeFile(){
		String str = "this \n is a \n test";
		try {
			
			FileOutputStream out = new FileOutputStream("d:/temp/a.txt");
		
			out.write(str.getBytes());
			
			out.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 讀文件
	 */
	public void readFile(){
		try {
			FileInputStream in = new FileInputStream("d:/temp/a.txt");
		
			byte bs[] = new byte[100];
			
			in.read(bs);
		
			
			System.out.println("file content="+new String(bs));
			in.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		FileIO io = new FileIO();
//		io.readFile();
		io.writeFile();
	}

}
相關文章
相關標籤/搜索