1. 程式人生 > >JAVA中的IO流封裝資料傳輸以及通訊

JAVA中的IO流封裝資料傳輸以及通訊

近些天學得JAVA中的IO流,對通訊有了很深的理解,分享一個DEMO建立檔案以及往檔案以特定格式寫入或讀取資訊!

直接上Demo

package IOcontrolCeshi;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;

public class ZijieLiuToZifuLiu {

    /**
     * 輸入輸出流中的位元組流轉化成字元流
     * 使用方法 InputStreamReader 與 OutputStreamWriter
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //建立一個檔案作為儲存和讀取的載體
        File file = new File("ByteToChar.txt");            //使用相對路徑預設路徑
        if (!file.exists()) {
            try {
                System.out.println("開始建立檔案ByteToChar.txt");
                file.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (file.exists()) {
                System.out.println("檔案建立成功!");
            }
        }else {
            System.out.println("檔案已經存在!");
        }
        System.out.println("檔案的路徑為"+file.getAbsolutePath());
        
        
        //從控制檯輸入數字選擇兩個功能:    1.寫入檔案      2.讀取檔案
        System.out.println("請輸入你要操作的序號: 1.寫入檔案    2.讀取檔案");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        
        switch (choice) {
        //用檔案輸出流寫入資訊資料    用OutputStreamWriter將輸出位元組流轉換成輸出字元流,並使用方法指定格式:GBK UTF-8    gb2312 等格式
        case 1://使用輸出流寫入檔案
            //宣告需要用到的幾個輸出流
            FileOutputStream fileOutputStream            = null;
            BufferedOutputStream bufferedOutputStream   = null;
            OutputStreamWriter outputStreamWriter        = null;
            BufferedWriter bufferedWriter                = null;
            
            
            try {
                 fileOutputStream        =       new FileOutputStream(file);
                 bufferedOutputStream    =       new BufferedOutputStream(fileOutputStream);
                 //輸出快取位元組流  轉化成  輸出快取字元流
                 try {
                    outputStreamWriter   =       new OutputStreamWriter(bufferedOutputStream, "GBK");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                 bufferedWriter          =       new BufferedWriter(outputStreamWriter);
                 System.out.println("請輸入你要錄入的資訊:");
                 String inString = scanner.next();
                 try {
                    bufferedWriter.write(inString);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                 
                 System.out.println("錄入資訊成功!");
                 
                 
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                //最後宣告的流最先關閉   依次關閉所有的流
                if (bufferedWriter!=null) {
                    try {
                        bufferedWriter.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    
                    if (outputStreamWriter!=null) {
                        try {
                            outputStreamWriter.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        
                        if (bufferedOutputStream!=null) {
                            try {
                                bufferedOutputStream.close();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            
                            if (fileOutputStream!=null) {
                                try {
                                    fileOutputStream.close();
                                } catch (IOException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                        }
                    }
                }
            }
            break;
            
            
        //用檔案輸入流讀取資訊資料    用InputStreamReader將輸入位元組流轉換成輸入字元流,並使用方法指定格式:GBK UTF-8    gb2312 等格式 進行讀取    
        case 2://讀取檔案
            //宣告幾個要用的輸入流
            FileInputStream         fileInputStream            = null;
            BufferedInputStream     bufferedInputStream        = null;
            InputStreamReader        inputStreamReader        = null;
            BufferedReader             bufferedReader            = null;
            
            System.out.println("開始讀取檔案<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
            
            try {
                 fileInputStream          = new FileInputStream(file);
                 bufferedInputStream     = new BufferedInputStream(fileInputStream);
                //使用InputStreamReader 方法 將輸入位元組流  轉換成 輸入字元流
                try {
                     inputStreamReader  = new InputStreamReader(bufferedInputStream, "UTF-8");
                    
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                 bufferedReader         = new BufferedReader(inputStreamReader);
                 char[] out = new char[1024];
                 int len = 0;
                 try {
                    while ((len = bufferedReader.read(out))!=-1) {
                        System.out.println("你要讀取的資訊為:"+new String(out, 0, len));
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                 
                 
                 
                 
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                //最後宣告的流最先關閉   依次關閉所有的流
                if (bufferedReader!=null) {
                    try {
                        bufferedReader.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    
                    if (inputStreamReader!=null) {
                        try {
                            inputStreamReader.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        
                        if (bufferedInputStream!=null) {
                            try {
                                bufferedInputStream.close();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            
                            if (fileInputStream!=null) {
                                try {
                                    fileInputStream.close();
                                } catch (IOException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                            
                            
                        }
                        
                        
                    }
                    
                }
                
            }
            break;
        default:
            System.out.println("你的輸入有誤,請重新輸入!");
            break;
        }
        
        
    }
    
        

}