Java 字节流

字节流可以处理一切文件

主要介绍两个最常用的类

一、InputStream中的FileInputStream

读取文件:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
  
/**
 * 文件的读取
 * 1、建立联系   File对象
       2、选择流     文件输入流  InputStream FileInputStream
       3、操作  : byte[] car =new byte[1024];  +read+读取大小
              输出
       4、释放资源 :关闭
 * @author Administrator
 *
 */
public class Demo01 {
  
       /**
        * @param args
        */
       public static void main(String[] args) {
              //1、建立联系   File对象
              File src =new File("e:/xp/test/a.txt");
              //2、选择流
              InputStream is =null; //提升作用域
              try {
                     is =new FileInputStream(src);
                     //3、操作 不断读取 缓冲数组
                     byte[] car =new byte[1024];
                     int len =0; //接收 实际读取大小
                     //循环读取
                     StringBuilder sb =new StringBuilder();
                     while(-1!=(len=is.read(car))){
                            //输出  字节数组转成字符串
                            String info =new String(car,0,len);
                            sb.append(info);
                     }
                     System.out.println(sb.toString());
                     
                     
              } catch (FileNotFoundException e) {
                     e.printStackTrace();
                     System.out.println("文件不存在");
              } catch (IOException e) {
                     e.printStackTrace();
                     System.out.println("读取文件失败");
              }finally{
                     try {
                            //4、释放资源
                            if (null != is) {
                                   is.close();
                            }
                     } catch (Exception e2) {
                            System.out.println("关闭文件输入流失败");
                     }
              }
       }
  
}

小结:

1.car数组是做缓冲用的,决定了单次读取文件的字节数,由于是字节流,所以必须是字节数组

2.构造器必须传入File对象

3.异常机制

二、OutputStream与FileOutStream

写出文件:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
  
/**
 * 写出文件
1、建立联系   File对象  目的地
2、选择流     文件输出流  OutputStream FileOutputStream
3、操作  :  write() +flush
4、释放资源 :关闭
 * @author Administrator
 *
 */
public class Demo02 {
  
       /**
        * @param args
        */
       public static void main(String[] args) {
              //1、建立联系   File对象  目的地
              File dest =new File("e:/xp/test/test.txt");
              //2、选择流   文件输出流  OutputStream FileOutputStream
              OutputStream os =null;
              //以追加形式 写出文件 必须为true 否则为覆盖
              try {
                     os =new FileOutputStream(dest,true);
                     //3、操作
                     String str="bjsxt is very good \r\n";
                     //字符串转字节数组
                     byte[] data =str.getBytes();
                     os.write(data,0,data.length);
                     
                     os.flush(); //强制刷新出去
              } catch (FileNotFoundException e) {
                     e.printStackTrace();
                     System.out.println("文件未找到");
              } catch (IOException e) {
                     e.printStackTrace();
                     System.out.println("文件写出失败");
              }finally{
                     //4、释放资源 :关闭
                     try {
                            if (null != os) {
                                   os.close();
                            }
                     } catch (Exception e2) {
                            System.out.println("关闭输出流失败");
                     }
              }
       }
  
}

小结:

1.在构造FileOutputStream对象时,除了传递File对象外,还需传递是否覆盖的bool值,true--->不覆盖,flase--->覆盖,默认为flase。

2.在写入之前,需要先将输入数据转化为字节数字,可通过getBytes()方法实现

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值