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();
    }
}
复制代码
 
原文地址:https://www.cnblogs.com/hanease/p/15717329.html