JAVA檔案與資料流(1)

yusenDong發表於2017-02-22

輸入流與輸出流


輸入流:將資料從檔案、標準輸入或其他外部輸入裝置中載入到記憶體。
輸出流:將記憶體中的資料儲存到檔案或輸出給輸出裝置。


1.InputStream和FileInputStream


1)InputStream

因為java.io.InputStream是抽象類,所以不能通過“new InputStream()”的方式構造例項物件。
但是他定義了輸入流的基本操作。

螢幕回顯舉例:


import java.io.InputStream;
import java.io.IOException;

public class Demo{
    public static void echo(InputStream in){
        try{
            while(ture){
                int i = in.read();
                if (i == -1)
                    break;
                char c = (char) i;
                System.out.print(c);
            }//while 迴圈結束
        }catch(IOException e){
            System.err.println("異常"+e);
            e.printStackTrace;
        }//try-catch 結構結束
        System.out.println();
    }//echo 結束

    public static void main(String[] args){
        echo(System.in);
    }//main 結束
}

應用舉例:

輸入:asdf
輸出:asdf

System.in是java.in.InputStream型別的變數,對應於標準輸入,接受鍵盤輸入,可以將System.in作為引數傳給成員方法echo。

2)FileInputStream
FileInputStream是InputStream的子類,所以類FileInputStream的例項物件同樣可以呼叫相應的read成員方法從輸入流讀入位元組,並通過close城花園方法關閉輸入流。

讀取檔案舉例:

import java.io.FileInputStream
import java.io.IOException

public class Demo{
    public static void main(String[] args){
        try{
            //檔名:test.txt
            FileInputStream f=new FileInputStream("test.txt");
            int b=f.read();
            //讀取字元,直到空
            for(i=0;b!=-1;i++){
                System.out.print((char)b)
                b=f.read();
            }//for迴圈結束
            //關閉檔案
            f.close();
        }catch(IOException e){
            System.err.println("異常"+e);
            e.printStackTrace();
        }//try-catch結構結束
    }//main結束
}

如果有text.txt那麼讀取檔案,如果不存在則顯示異常。(記得關閉檔案呀)


2.OutputStream和FileOutStream

1)OutputStream
java.io.OutputStream是用來處理輸出流的類,定義了輸出流的各種基本操作。比如輸出資料(write)和關閉輸出流等。
java.io.OutputStream是抽象類,不能通過 new OutputStream() 的方法構造例項物件。

public void write(byte[] b) throws IOException

將位元組陣列b的各個位元組寫寫入當前檔案中。

public void flush()throws IOException

目前計算機系統為了提高執行效率常常採用快取機制,呼叫write後常常不將資料直接寫入,而是暫時儲存在快取中,等資料累計到一定程度後才會真正往外輸出資料
呼叫write方法後常常呼叫flush之後馬上可以看到輸出結果

2)FileOutputStream
FileOutputStream是OutputStream的子類,可以通過下面構造方法建立例項物件。

public FileOutputStream(String name) throws FileNotFoundException
public FileOutputStream(String name,boolean append) throws FileNotFoundException

其中,name是指定檔名,append是指定寫入的方式。當append為true時,資料將被新增到檔案已有內容的末尾處;當引數為false時,檔案已有內容將被新寫入的內容覆蓋。

將字串寫入”test.txt”程式碼舉例:

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

public class OutputDemo{
    public static void main(String[] args){
        String s = "outputDemo";
        //getBytes()是將一個String型別的字串中包含的字元轉換成byte型別並且存入一個byte[]陣列中
        byte[] b = s.getBytes();
        try{
            FileOutputStream f = new FileOutputStream("test.txt");
            f.write(b);
            f.flush();
            f.close();
        }catch(IOException e){
            System.err.println("異常"+e)
            e.printStackTrace();
        }//try-catch結束
    }//mian結束
}

檔案操作有可能產生異常,一般需要try-catch結構處理相應的異常。


本來想一次寫完的,沒想到這麼多 ┌( ಠ_ಠ)┘

相關文章