首先什么是IO呢?IO就是Input和Output即輸入輸出。Java中將從能夠發(fā)送字節(jié)序列的任何數(shù)據(jù)源取得輸入和將輸出發(fā)送到能夠接收字節(jié)序列的任何目的地抽象為流的輸入和輸出。要注意這里說(shuō)的輸入是指從文件、網(wǎng)絡(luò)連接或內(nèi)存塊中讀取字節(jié)序列到程序中,輸出是指從程序中流出到文件、網(wǎng)絡(luò)連接或內(nèi)存塊中。

     對(duì)流的類型可以從三個(gè)角度進(jìn)行分類。

     按數(shù)據(jù)流的方向不同可以分為輸入流和輸出流。(以程序的角度考慮)

     按處理數(shù)據(jù)的單位不同分為字節(jié)流(以byte為單位8位)和字符流(16位)。

     按功能的不同可以分為節(jié)點(diǎn)流和處理流。

     下表中的是輸入輸出的抽象類,是不能進(jìn)行實(shí)例化的。

image

     以下的是上面抽象類比較常用的的子類,在實(shí)現(xiàn)父類方法的同時(shí)都定義了自身特有的功能。

FileInputStream/FileOutputStream//以File開頭,節(jié)點(diǎn)流,用來(lái)操作文件,字節(jié)流。

FileReader\FileWriter //以File開頭,處理流,用來(lái)操作文件,字符流。

BufferedInputStream/BufferedOutputStream//帶緩沖的,處理流,字節(jié)流。

BufferedReader\BufferedWriter //帶緩沖的,處理流,字符流。

     不難看出以Stream結(jié)尾的是字節(jié)流,以Reader、Writer結(jié)尾的是字符流。

     緩沖流要套接在相應(yīng)的節(jié)點(diǎn)流上,將讀寫的數(shù)據(jù)先放在內(nèi)存中進(jìn)行緩存,提高了鍍錫效率,同時(shí)擴(kuò)展了一些方法。使用flush方法可以使內(nèi)存中數(shù)據(jù)立刻寫出。

     處理流要套接在節(jié)點(diǎn)流或者處理流上,通過對(duì)數(shù)據(jù)的處理增強(qiáng)程序的讀寫功能。

     舉一部分例子:

     用File創(chuàng)建文件

1.

import java.io.File;
import java.io.IOException;

public class IODemo1 {
    public static void main(String[] args) throws IOException{
        File f = null;
        f = new File("f:"+File.separator+"demo.txt");//或?qū)懗?"f:\\demo.txt")
        System.out.println(f.createNewFile());//當(dāng)不存在具有此抽象路徑名指定名稱的文件時(shí),創(chuàng)建一個(gè)新的空文件。
        System.out.println(f.getPath());//獲取文件目錄
        System.out.println(f.isDirectory());//判斷文件是否是一個(gè)目錄
    }
}

運(yùn)行結(jié)果

image

2.

import java.io.File;

public class IODemo2 {
    public static void main(String[] args){
        File f = null;
        f = new File("f:"+File.separator+"demo01.txt");
        if(f.exists()){//如果文件存在則刪除
            f.delete();
        }
        else{
            try{
                System.out.println(f.createNewFile()+"文件已創(chuàng)建");//文件不存在則創(chuàng)建
            }catch(Exception e){}
        }
    }

}

運(yùn)行結(jié)果提示文件已創(chuàng)建。

3.

import java.io.File;

public class IODemo3 {
    public static void main(String[] args){
        File f = new File("F:");
        File file[] = f.listFiles();//將F盤的文件和目錄名存在數(shù)組中
        for(int i=0;i<file.length;i++){
            System.out.println(file[i]);
        }
        String str[] = f.list();//將F盤的文件存在數(shù)組中
        for(int i=0;i<str.length;i++){
            System.out.println(str[i]);
        }
    }
}

額  F盤文件太多了,就不截圖了哈,可以自己試一下!^_^

     InputStream的例子:

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class IODemo8 {
    public static void main(String[] args) {
        File f = new File("e:" + File.separator + "demo.txt");// 要輸入到的文件
        InputStream input = null;
        try {
            input = new FileInputStream(f);
        } catch (Exception e) {
        }
        byte b[] = new byte[9];
        for (int i = 0; i < b.length; i++) {
            try {
                b[i] = (byte) input.read();
            } catch (Exception e) {
            }
        }
        try {
            input.close();
        } catch (Exception e) {
        }
        // 輸出讀入的內(nèi)容
        System.out.println(new String(b));
    }

}

image

因?yàn)槎x的數(shù)組長(zhǎng)度是1024,所以后面跟了N多個(gè)空格。

FileInputStrea的例子:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class IODemo13 {
    public static void main(String[] args){
        int b=0;
        FileInputStream in = null;
        try{
            in = new FileInputStream("e:"+File.separator+"demo1.txt");
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }
        long num  = 0;
        try{
            while((b=in.read())!=-1){//到文件尾得到-1,結(jié)束循環(huán)
                System.out.print((char)b);
                num++;
            }
            in.close();
        }catch(IOException e){e.printStackTrace();}
        System.out.println("共讀取了"+num+"個(gè)字節(jié)");
    }

}

Reader的例子:

import java.io.File;
import java.io.FileReader;
import java.io.Reader;

public class IODemo11 {
    public static void main(String[] args){
        File f=new File("e:"+File.separator+"demo.txt");
        Reader r =null;
        try{
            r = new FileReader(f);
        }catch(Exception e){}
        char c[] = new char[1024];
        int count = 0;
        try{
            count = r.read(c);
        }catch(Exception e){}
        System.out.println(new String(c,0,count));
    }

}

運(yùn)行結(jié)果^_^

image

FileWriter的例子:

import java.io.File;
import java.io.FileWriter;

public class IODemo12 {
    public static void main(String[] args){
        File f =new File("e:"+File.separator+"demo02.txt");//要寫入到的文件
        FileWriter out = null;
        try{
            out = new FileWriter(f);
        }catch(Exception e){}
        try{
            out.write("Hello fly—");//寫入的內(nèi)容
        }catch(Exception e){}
        try{
            out.close();
        }catch(Exception e){}
    }

}

額 這個(gè)在E盤生成了一個(gè)文件demo02,里面有以句話Hello fly—。

BufferedReader的例子:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class IODemo17 {
    public static void main(String[] args){
        BufferedReader buf = null;
        buf = new BufferedReader(new InputStreamReader(System.in));//從鍵盤獲取輸入的內(nèi)容
        String str = null;
        System.out.print("請(qǐng)輸入內(nèi)容:");
        try{str = buf.readLine();//讀取輸入的內(nèi)容
        buf.close();
        }catch(Exception e){}
        System.out.println("輸入的內(nèi)容:"+str);
    }

}

 

image

 

就舉這些例子吧!有錯(cuò)的請(qǐng)指出來(lái)哈^_^!