Java 字节流

字节流可以处理一切文件,主要介绍常用两类:

  • InputStream中的FileInputStream:

         从文件读取数据至流内。

package SAMPLE.IO流;
import java.io.*;
/*文件 字节输入流
   1、确定源文件
   2、选择流 文件输入流:FileInputStream
   3、操作(读取/分段读取)
   4、释放资源
 */
public class InputStream字节流 {
    public static void main(String[] args) {
        //选择源文件
        File src = new File("C:\\Users\\kvnoe\\Desktop\\Jcase\\aaa.txt");
        //选择流
        InputStream is = null;//扩展作用域
        try {
            is = new FileInputStream(src);
            //操作(读取)
            int temp;
            while((temp=is.read())!=-1){
                System.out.println((char)temp);
            }
            //操作(分段读取)
            byte[] flush = new byte[3];//缓存容器
            int len = -1;//接收长度
            while((len=is.read(flush))!=-1){//is.read(flush)返回一个int,为此次read中flush读入字节数
                //字节数组-->字符串(解码)
                String str = new String(flush,0,len);//若不规定区间[0,len]则会输出空字符
                System.out.println(str);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("文件不存在");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("读取文件失败");
        }finally {
            //释放资源close
            try {
                if(is!=null)//若src成功输入流
                    is.close();
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("关闭文件输入流失败");
            }
        }
    }
}

小结:

1、字节数组flush作为缓冲容器,存放流中的字节数据。

2、异常机制。

  • OutputStream中的FileOutputStream:

            从流内读取数据至文件。

package SAMPLE.IO流;
import java.io.*;
/*文件 字节输出流
   1、确定源文件
   2、选择流 文件输入流:FileInputStream
   3、操作(读取/分段读取)
   4、释放资源
 */
public class OutputStream字节流 {
    public static void main(String[] args) {
        //选择/创建源文件
        File dest = new File("C:\\Users\\kvnoe\\Desktop\\Jcase\\bbb.txt");
        //选择流
        OutputStream os = null;//扩展作用域
        try {
            os = new FileOutputStream(dest,false);//append为True:追加,False:覆写。默认为False
            //操作(写出)
            String msg = "IO? just so so";
            byte[] datas = msg.getBytes();//字符串-->字节数组(编码)
            os.write(datas,0,datas.length);
            os.flush();
        /*} catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("文件不存在");OutputStream中若目标文件不存在则自动创建*/
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("写出文件失败");
        }finally {
            //释放资源close
            try {
                if(os!=null)
                    os.close();
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("关闭文件输出流失败");
            }
        }
    }
}

小结:

1、FileOutputStream具有追加写和覆写两种形式,默认为覆写。

2、数据在字节流中以字节的形式流动,可用getBytes()方法将非字节数据转换为字节数据。

3、最后必须调用flush()方法强制刷出,因为可能会有部分数据残留在缓冲区,导致写出数据不完  整。

  • 利用字节流实现文件拷贝:

            InputStream和OutputStream的实例运用。

package cn.test;
import java.io.*;
/*字节流实现文件拷贝
   1、选择文件:源文件src,目标文件dest。
   2、选择流:
       src-->InputStream
       dest-->OutputStream
   3、操作(拷贝):
       数据以字节流byte[]形式从src经过流流入dest,拷贝完成。
   4、释放资源,关闭所有流,一般先打开的后关闭。
 */
public class 字节流实现文件拷贝 {
    public static void main(String[] args) {
        String srcPath = "C:\\Users\\kvnoe\\Desktop\\Jcase\\aaa.txt";
        String destPath = "C:\\Users\\kvnoe\\Desktop\\Jcase\\bbb.txt";
        copy(srcPath,destPath);
    }
    public static void copy(String srcPath,String destPath){
        File src = new File(srcPath);
        File dest = new File(destPath);
        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream(src);
            os = new FileOutputStream(dest,true);
            int len =-1;
            byte[] flush = new byte[3];
            while((len=is.read(flush))!=-1){
                os.write(flush,0,len);
            }
            os.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {//先打开的后关闭
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

小结:

先打开的文件后关闭。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值