Java中的IO
IO流也是種對(duì)象,Java中的一切都是對(duì)象。
IO操作的目標(biāo):從數(shù)據(jù)源中讀取數(shù)據(jù)孤钦,以及將數(shù)據(jù)讀寫到數(shù)據(jù)目的地當(dāng)中询刹。
IO分類
1.輸入流/輸出流。
2.字節(jié)流/字符流。
每次讀寫1~n個(gè)字節(jié)或字符。
字節(jié)流的核心類,InputStream(abstract)<----FileInputStream Int read(byte[] b, int off, int len)
,以字節(jié)的形式讀取數(shù)據(jù)数尿,放入byte型的數(shù)組b中。Int off惶楼,是偏移量右蹦,len為長(zhǎng)度。
OutPutStream(abstract)<----FileOutputStream Void write(byte[]b, int off, int len);
*字節(jié)流讀燃呔琛:
import java.io.*;
class test{
public static void main(String argsrgs[]){
//聲明輸入何陆,輸出流引用
FileInputStream fis = null;
FileOutputStream fos = null;
try{
//生成代表輸入,輸出流的對(duì)象
fis = new FileInputStream("e:/notpad/from.txt");
fos = new FileOutputStream("e:/notpad/to.txt");
//生成一個(gè)字節(jié)數(shù)組
byte [] buffer = new byte[100];
//read()返回值為int類型豹储,這一次我們讀取了多少字節(jié)的數(shù)據(jù)
//調(diào)用輸入字節(jié)流的read()方法贷盲,讀取數(shù)據(jù)
//調(diào)用輸出字節(jié)流的write()方法,讀取數(shù)據(jù)
int temp = fis.read(buffer, 0 ,buffer.length);
fos.write(buffer, 0 ,temp);
/* 按字節(jié)依次取出在屏幕上
for(int i = 0 ; i <= buffer.length; i++){
System.out.println(buffer[i]);
} *//* 將字節(jié)轉(zhuǎn)換成字符串,存放于S中
String s = new String(buffer);
s = s.trim();
System.out.println(s); */
}
catch(Exception e){
e.printStackTrace();
}
finally{ }
}
}
當(dāng)讀取大文件時(shí):
//生成一個(gè)字節(jié)數(shù)組
byte [] buffer = new byte [1024];
//read()返回值為int類型巩剖,這一次我們讀取了多少字節(jié)的數(shù)據(jù)
//調(diào)用輸入字節(jié)流的read()方法铝穷,讀取數(shù)據(jù)
//調(diào)用輸出字節(jié)流的write()方法,讀取數(shù)據(jù)
//讀取大文件時(shí)佳魔,應(yīng)循環(huán)讀取曙聂,
//當(dāng)read()返回值為-1時(shí),表示已經(jīng)讀完文件鞠鲜,利用break跳出當(dāng)前循環(huán)
while(true){
int temp = fis.read(buffer, 0 , buffer.length);
if(temp == -1){
break;
}
fos.write(buffer, 0 ,temp);
}
finally{
//關(guān)閉輸入輸出管道
try{
fis.close();
fos.close();
}
catch(Exception e){
e.printStackTrace();
}
}
字符流讀取大文件時(shí):
//字符流:讀寫時(shí)以字符為基礎(chǔ)
//字符輸入流都是Reader的子類<-- FileReader
//int read(char [] c , int off , int len)
//字符輸出流都是Writer的子類<---FileWriter
// void writer(char [] c ,int off ,int len)
3.節(jié)點(diǎn)流/處理流宁脊。
處理流是在節(jié)點(diǎn)流的基礎(chǔ)上對(duì)數(shù)據(jù)在進(jìn)行加工。(eg:水管外邊的加熱管道)
字節(jié)流是被裝飾者贤姆,處理流BufferedReader是裝飾者朦佩。
-
字符輸入處理流BufferedReader的使用
處理流中的方法:一次讀取一行public String readLine() throws IOException
生成BufferedReader的對(duì)象:
BufferedReader in= new BufferedReader(new FileReader("foo.in"));
public static void main(String args[]){ FileReader fr = null; BufferedReader br = null; try{ fr = newFileReader("e:/notpad/34/users.txt"); br = new BufferedReader(fr); String line = null; //讀取大文件時(shí) while(true){ line = br.readLine(); if(line == null){ break; } System.out.println(line); } }
設(shè)計(jì)模式之裝飾著模式
接口工人worker下有兩個(gè)子類水管工plumber庐氮,與木匠工carpenter。均實(shí)現(xiàn)接口下的doSth()方法宋彼。A公司Aworker實(shí)現(xiàn)接口worker弄砍,Agongs 員工(水管&木匠)說“你好,A公司員工”输涕。音婶。。
//將水管工的對(duì)象作為參數(shù)傳入Aworker()這個(gè)構(gòu)造函數(shù)中莱坎,
//則現(xiàn)在A公司現(xiàn)在worker這個(gè)成員變量為水管工衣式。
class Aworkerimplements worker{
private worker worker;
Aworker(worker worker){
this.worker = worker;
}
public void doSth(){
System.out.println("你好,A公司員工");
worker.doSth();
}
}
在test類中:
public static void main(String args[]){
plumber p = new plumber();
//p向上轉(zhuǎn)型為worker類型的參數(shù)檐什,傳入Aworker中碴卧。Aworker為裝飾著
Aworker A = new Aworker(p);
A.doSth();
}