文件读入写出字节流

18 篇文章 0 订阅

 一次读取一个字节

public static void read1() throws IOException { 
    // 1. 建立程序与文件之间的连接,用来读取这个文件 
    try(InputStream inputStream = new FileInputStream("test1.txt")){ 
        //2.读取数据,先声明一个变量,read方法的返回值,就是读取的数据 
        //注意:返回-1,默认认为数据读完了 int num = 0; 
        // num = inputStream.read(); 
        //3.直接读取数据 
        //想显示字符需要自己强转 
        // System.out.println((char)num); 
        // num = inputStream.read(); 
        // System.out.println((char)num); 
        // num = inputStream.read(); 
        // System.out.println((char)num); 
        // num = inputStream.read(); 
        // System.out.println((char)num); 
        // num = inputStream.read(); 
        // System.out.println((char)num); 
        // num = inputStream.read(); 
        // System.out.println(num);
        //返回-1,默认认为数据读完了 
        //4.使用循环读取数据 
        while ((num = inputStream.read()) != -1) { 
            System.out.print((char)num); 
        } 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
}

一次读取多个字节

public static void read2() throws IOException { 
    // 1. 建立程序与文件之间的连接,用来读取这个文件 
    try (InputStream inputStream = new FileInputStream("test1.txt")) { 
        // 2. 读取字节流中的数据,需要有一个字节数组,用来读取数据 
        //创建临时数组 
        /* 数组是临时存放数据的地方,我们会将读到的字符放到临时数组中,数组的 大小决定了我们一次可以读到的字符个数. 
         * 一般这个数组的大小<=1kB
         * 返回值代表本次读到的真实的字符个数,如果返回值是-1代表读完了. 
         */  
        byte[] arr = new byte[2]; 
        // 3. 声明一个整型变量,用来记录每次读取了多少个字节的数据 
        int num = 0;  
        //4.直接读取数据 
        // num = reader.read(arr);
        // System.out.println(new String(arr,0,num)+" num:"+num); 
        // num = reader.read(arr); 
        // System.out.println(new String(arr,0,num)+" num:"+num); 
        // num = reader.read(arr); 
        //转部分字符到字符串,第二个参数是指定的下标,第三参数是字符数量
        // 将读取到的字节数组中的数据,转成字符串输出
        // 为了去除最后一次进行读取数据的时候,上次读取残留的问题
        // 最后一次读取的数据,只有指定部分是我们需要的数据
        // System.out.println(new String(arr,0,num)+" num:"+num);
        // num = reader.read(arr);
        // System.out.println(" num:"+num);
        //5.使用循环读取数据
        while ((num = inputStream.read(arr)) != -1){ 
            System.out.println(new String(arr,0,num)+" num:"+num);
        } 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
}

一次性全部读入

public static void read3() throws IOException {
    // 1. 建立程序与文件之间的连接,用来读取这个文件 
    try (InputStream inputStream = new FileInputStream("test1.txt")) { 
        // 2. 读取字节流中的数据,需要有一个字节数组,用来读取数据 
        //获取文件的字节个数 
        //注意:这种方式适合文件的字节数比较小的时候,大概是几kb之内. 
        int num = inputStream.available(); 
        //2.读
        byte[] bytes = new byte[num]; 
        inputStream.read(bytes); 
        System.out.println(new String(bytes)); 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
}

字节输出流

public class OutputStreamTest { 
    public static void main(String[] args) { 
        // 1. 实例化一个管道,连接文件和程序。 
        // 对于FileOutputStream来说,如果目标文件不存在,则会自动的创建,如果 存在,会将原来的内容覆盖 
        // 当无法创建这个文件的时候(父级目录不存在),创建会失败,会触发 FileNotFoundException 。 
        //OutputStream outputStream = new FileOutputStream("test1.txt") 
        //文件的续写:FileWriter(String file,boolean value) 
        //当value位true的时候,不会将原来的内容覆盖,会接着写    
        try (OutputStream outputStream = new FileOutputStream("test1.txt",true)) { 
            // 2. 准备需要写入到这个文件中的数据 String message = "你好,师姐"; 
            // 3. 将数据写入到输出流中,由输出流写入到文件中 
            //将字符串转成字节数组 
            outputStream.write(message.getBytes()); 
            // 冲刷缓冲区,将缓冲区中的数据强制流动到文件中。 
            // 在流关闭的时候,会自动的调用。 
            //注意:当我们进行循环写入操作时,最好通过flush()方法刷新 
            outputStream.flush(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值