1. 程式人生 > 其它 >java基礎知識回顧之javaIO類---FileInputStream和FileOutputStream位元組流複製圖片

java基礎知識回顧之javaIO類---FileInputStream和FileOutputStream位元組流複製圖片

java基礎知識回顧之javaIO類---FileInputStream和FileOutputStream位元組流複製圖片

package com.lp.ecjtu;

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


/**
 * 
 * @author Administrator
 * 1.用位元組讀取流物件和圖片相關聯(輸入流)
 * 2.用位元組寫入流物件建立一個圖片檔案。用於儲存獲取到的圖片資料(輸出流)
 * 3.通過迴圈讀寫,完成資料的儲存
 * 4.關閉資源
 *
 */
public class CopyPicStream {

    /**
     * @param args
     */
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream("d:\\1.jpg");//讀取影象資料之類的原始位元組流
            fos = new FileOutputStream("2.bmp");//用於寫入諸如影象資料之類的原始位元組流
            byte[] b = new byte[1024];
            int len = 0;
            while ((len=fis.read(b)) != -1){
                fos.write(b);
            }
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e) {
            throw new RuntimeException("複製圖片失敗!");
        }finally{
            try {
                if(fis != null){
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(fos != null){
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

java基礎知識回顧之javaIO類---InputStreamReader和OutputStreamWriter轉化流

InputStreamReader:是位元組流通向字元流的橋樑;

OutputStreamWriter 是字元流通向位元組流的橋樑;

package com.lp.ecjtu;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class SystemReadInKeyTranfer {
    /**
     * 1.源:鍵盤
     *  目的:控制檯
     * 2.源:鍵盤錄入:把鍵盤錄入的資料儲存到一個檔案中
     * 目的:檔案
     * 3.源:檔案:將檔案中的資料列印在控制檯上
     * 目的:控制檯
     * 流操作的基本流程:
     *   通過兩個明確來完成
     *      1 明確源和目的
     *        源:輸入流,InputStream Reader
     *        目的:輸出流 :outputStream Writer
     *      2.操作的是否為純文字
     *         是:字元流
     *         不是:位元組流
     *      3.當體系明確後,在明確使用哪個具體的物件。
     *        通過來裝置來區分:
     *            源裝置:記憶體,硬碟,鍵盤
     *          目的:記憶體,硬碟,控制檯
     *  1.將一個文字檔案中的資料儲存到另一個檔案。複製檔案。
     *     源:因為是源,所以使用讀取流。InputStream Reader
     *     是文字檔案:這是可以選擇Reader
     *     明確裝置:硬碟上的一個檔案
     *     Reader體系中可以操作檔案的FileReader
     *     是否提高效率,是,加入Reader體系中的BufferedReader
     *     FileReader fr = new FileReader("a.txt");
     *     BufferedReader buffr = new BufferedReader(fr);
     *     
     *     目的:outputStream Writer
     *     是否為純文字,是!用字元流 Reader.
     *     裝置:硬碟上的檔案.
     *     Writer體系中可以操作檔案的FileWriter
     *             是否提高效率,是,加入Writer體系中的BufferedWriter
     *     FileWriter fr = new FileWriter("a.txt");
     *     BufferedWriter buffr = new BufferedWriter(fr);
     *     
     *     2.將一個圖片檔案中的資料儲存到另一個檔案。複製檔案。
     */
    public static void main(String[] args){
        
        BufferedReader bufferr = null;
        BufferedWriter bufferw = null;
        try {
            //將System.in->InputStream->Reader物件
            //將Reader物件包裝成BufferedReader物件
  //鍵盤錄入
 /*bufferr = 
    new BufferedReader(new InputStreamReader(System.in));

//把鍵盤錄入的資料儲存到out.txt檔案當中
 bufferw= 
    new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt")));
*/
            //將檔案中的資料與bufferedReader相關聯,InputStreamReader位元組向字元轉化的橋樑。
                bufferr = 
                    new BufferedReader(new InputStreamReader(new FileInputStream("FileReaderDemo.java")));
            //將檔案的資料列印到控制檯,OutputStreamWriter字元向位元組轉化的橋樑
                bufferw = new BufferedWriter(new OutputStreamWriter(System.out));
            String line = null;
            //採用迴圈的方式逐個讀取
                while((line=bufferr.readLine())!=null){
                    //如果讀取的字串為“over”的時候,則程式退出
                    if(line.equals("over")){
                        System.exit(-1);//或者用break
                    }
                    //列印讀取的內容
                    //System.out.println(line.toUpperCase());
                    //使用字元輸出流進行輸出
                    bufferw.write(line.toUpperCase());
                    bufferw.newLine();//跨平臺換行,不用'\r\n'
                    bufferw.flush();
                }
            } catch (IOException e) {
            // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                        if(bufferr != null){
                            bufferr.close();
                        }
                        if(bufferw != null){
                            bufferw.close();
                        }
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                
            }
        
}

java基礎知識回顧之javaIO類---BufferedInputStream和BufferedOutputStream

MP3的複製過程:

package com.lp.ecjtu;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


/**
 * 
 * @author Administrator
 * 演示MP3的複製
 * BufferedOutputStream
 * BufferedInputStream
 *
 */
public class CopyMp3Stream {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        long startTime = System.currentTimeMillis(); 
        copy_1();
        long endTime = System.currentTimeMillis();
        System.out.println("共耗費"+(endTime-startTime)+"毫秒");
    }
    
    public static void copy_1() throws IOException{
        //建立一個內部緩衝陣列,讀硬碟中的資料到緩衝區中,位元組流緩衝區
        BufferedInputStream bufIos = new BufferedInputStream(new FileInputStream("D:\\1.mp3"));
        BufferedOutputStream buffos = new BufferedOutputStream(new FileOutputStream("2.mp3"));
        int by = 0;
        
        while((by=bufIos.read()) != -1){//讀取緩衝區的資料到輸入流中
            buffos.write(by);//對輸出流進行寫操作
        }
        buffos.close();
        bufIos.close();
    }
}