IO流学习

输出流:将内存中的数据输出到硬盘中,即写入
输入流:将硬盘中的数据输入到内存中,即读取
字节输入流
package com.字节流;


import org.testng.annotations.Test;

import java.io.*;

/*
输出流:将内存中的数据输出到硬盘中,即写入
输入流:将硬盘中的数据输入到内存中,即读取
 */
public class 字节输入流 {
    @Test
    public void 单字节读取() throws IOException {
        //源文件:哇ABC
        FileInputStream fis = new FileInputStream(new File("E:\\excel\\t3.txt"));
        int len = fis.read();//读取文件一个字节,读到文件末尾返回-1
        System.out.println(len);//第一个字节

        len = fis.read();//第二个字节
        System.out.println(len);

        len = fis.read();//第三个字节
        System.out.println(len);
        //UTF-8一个汉字3给字节
        //JBK一个汉字2个字节
        len = fis.read();//第四个字节
        System.out.println(len);

        len = fis.read();//第五个字节
        System.out.println(len);

        len = fis.read();//第六个字节
        System.out.println(len);

        len = fis.read();//第七个字节  -1
        System.out.println(len);

        len = fis.read();//第8个字节  -1
        System.out.println(len);
        fis.close();
    }
    //优化读取,循环读取
    @Test
    public void 循环读取() throws IOException {

        FileInputStream fis = new FileInputStream(new File("E:\\excel\\t3.txt"));
        int len = 0;//读到文件末尾返回-1
        //将fis.read()看作一个循环
        while ((len = fis.read()) != -1){
             char len1 = (char) len;
            System.out.print(len1);
        }

        //该方法读取汉字出现乱码

        fis.close();
    }

    /*
    数组长度定义1024(1KB)或者1024的整数倍
     */
    @Test
    public void 数组读取() throws IOException {
        FileInputStream fis = new FileInputStream(new File("E:\\excel\\t3.txt"));
        //读到文件末尾返回-1
       //先定义一个数组
        byte[] a = new byte[1024];

        //记录有效字节个数
        int len = 0;
        while ((len = fis.read(a)) != -1){
            //读取的是整个1024长度数组,需要优化
           //String s = new String(a);
            System.out.println(new String(a));
        }
        //该方法读取的长度太长

        fis.close();
    }
    @Test
    public void 优化数组有效读取() throws IOException {
        FileInputStream fis = new FileInputStream(new File("E:\\excel\\t3.txt"));
        //读到文件末尾返回-1
        //先定义一个数组
        byte[] a = new byte[1024];

        //记录有效字节个数
        int len = 0;
        while ((len = fis.read(a)) != -1){
            //读取的是整个1024长度数组,需要优化,从0索引开始,有效个数是len,即读取的长度
            System.out.println(new String(a,0,len));
        }

        fis.close();
    }

    @Test
    public void 文件复制() throws IOException {
        //将源文件读取出来,写入新文件
        //定义两个字节流
        FileInputStream fis = new FileInputStream(new File("E:\\excel\\t2.txt"));
        FileOutputStream fos = new FileOutputStream(new File("E:\\excel\\复制后的文件.txt"));
        //先读,后写
        byte[] bytes = new byte[1024];
        int len= 0;
        String 复制文件内容 = null;
        while ((len = fis.read(bytes)) != -1){
             复制文件内容 = new String(bytes, 0, len);
        }

        //输出,写入目标文件  复制后的文件.txt
        fos.write(复制文件内容.getBytes());


        //写完了,那肯定读完了
        fos.close();
        fis.close();
    }
    @Test
    public void 视频复制() throws IOException {
        //原理和复制文件一样
        //字节流可以复制图片、txt、word、视频、音乐等文件
        long time1 = System.currentTimeMillis();
        FileInputStream fis = new FileInputStream(new File("E:\\音频\\第一章 测试基础\\什么是测试01.mp4"));
        FileOutputStream fos = new FileOutputStream(new File("E:\\excel\\视频.mp4"));
        byte[] bytes = new byte[1024*3];
        int len= 0;

        while ((len = fis.read(bytes)) != -1){
            fos.write(bytes,0,len);
        }

        fos.close();
        fis.close();

        long time2 = System.currentTimeMillis();
        System.out.println("复制视频所用时间:"+ (time2-time1) + "毫秒");//byte[1024] 982毫秒  byte[1024*3]是否更快,花费469毫秒
    }
}

输出字节流
package com.字节流;

import org.testng.annotations.Test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/*
输出流:将内存中的数据输出到硬盘中,即写入
输出流:将硬盘中的数据输入到内存中,即读取
 */
public class 输出字节流 {
    public static void main(String[] args) throws IOException {
        //创建一个输入流
        FileOutputStream fos = new FileOutputStream(new File("E:\\excel\\t2.txt"));
        //输入数组
        fos.write(new byte[]{65,66,67,68});
        //输入数组的一部分,索引位置和输入长度
        fos.write(new byte[]{65,66,67,68},1,2);
        //输入字符串
        //utf-8三个字节是一个中文;jdk中两个字节是一个中文
        fos.write("你好,李焕英".getBytes());
        fos.close();
    }
    @Test
    public void 追加写() throws IOException {
        /*
        追加写,把开关append打开true
        如果是false是重新创建文件,覆盖源文件(默认是false)
         */
        FileOutputStream fos = new FileOutputStream(new File("E:\\excel\\t2.txt"),true);
        fos.write("!我可以请你吃饭吗?".getBytes());
        fos.close();

    }
    @Test
    public void 追加换行写() throws IOException {
        /*
        追加写,把开关append打开true
        如果是false是重新创建文件,覆盖源文件(默认是false)
         */
        FileOutputStream fos = new FileOutputStream(new File("E:\\excel\\t2.txt"),true);
        fos.write("\n今天有点开心,捡到100块钱,哈哈哈~".getBytes());
        fos.close();

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值