IO流-字节的学习

本文深入浅出地介绍了计算机程序中的IO流概念及其分类,包括字节流和字符流的区别与应用场景,并通过实例展示了如何使用Java进行文件的读取与写入操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IO

  • 说到IO,脑海里更是模糊一片。什么 input output 还有stream reader 之类的什么鬼。这几天终于把它搞明白了。

    1.概念
    流流动 流向从一端移动到另一端 源头与目的地
    程序 与文件、数组、 网络、数据库 ,依程序为中心
    2.io流分流
    1.流向,输出流与输出流
    2.数据:字节流 二进制,可以一切文件 包括纯文本 doc 音频 、视频等等
    字符流:文件文本,只能处理纯文本
    3。功能:节点:包裹源头的
    处理流:增强功能,提供性能
    三。字节流与字符流(重点)
    1.字节流
    输入流 inputStream read +close FileInputStream
    输出流 outputstream write +flush +close FileOutputSteam
    2.字符流
    输入流 reader read +close FileReader()
    输入流 writier write + flush + close FileWiter

四。操作
1.距离 :搬家为例 -->读取文件
1.关联房子 -- 建立与文件练习
2.选择搬家 --选择对应流
3.搬家 --读取|写出
a卡车大小 --数组大小
b.运输 --读取、写出
4。打发over --释放资源
2.操作
1.建立练习
2.选择流
3.操作 数组大小reader、witer
4.close

------上面这些是上课看的比较乱

总结一下
文件的移动过程以流形式存在,一般是两种的形式,一种是字符流,比如我们的文本对象txt,另外是字节流 比如我们的图片,音频之类的,总不可能是文本的形式给我们看吧。

相应的操作就分为两种,一种是字节流的形式对文件进行操作
设计到的类就是

  输入: File  | InputStream    | FileInputStream 
  输入: File  | OutputStream   | FileOutputStream 

这三种类。

它们的操作步骤如下代码将进行展示

package cn.hjm.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
/**
 * 读取文件
 * @author hjm
*/
public class DemoFile01 {
public static void main(String[] args) {
    //创建file对象
    File file = new File("C:\\Users\\hjm\\Desktop\\有趣的句子.txt");
    
    InputStream is =null;
    try {
        //创建流
        is =new FileInputStream(file);
        //创建数组大小
        byte[] b = new byte[3];
        //规定字节大小
        int len=0;
        try {
            while(-1!=(len=is.read(b))){ //当读不到数据的时候为-1
                String str = new String(b,0,len); //构建字符串
                System.out.print(str);
            }
        } catch (IOException e) {
            
            e.printStackTrace();
        }
    } catch (FileNotFoundException e) {
        System.out.println("文件查找失败");
        e.printStackTrace();
    }finally{
        while(null!=is){ //该流存在的时候,关闭它
            try {
                is.close();
            } catch (IOException e) {
                
                e.printStackTrace();
                System.out.println("关闭输入流");
            }
        }
    }
}
}

 package cn.hjm.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * 写入文件
   * @author hjm
 *
 */
public class DemoFile02 {

public static void main(String[] args) {
    File file = new File("C:\\Users\\hjm\\Desktop\\有趣的句子.txt");
    OutputStream os = null;
    
    try {
        os = new FileOutputStream(file,true);
        String str ="hello world\r\n";
        byte[] b = str.getBytes();
        try {
            os.write(b);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            os.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
        
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        System.out.println("文件未找到!");
    }
    

}

}

----如何将文件进行拷贝,其实就是一端的流上车到另一端流的下车过车
我用比较通俗易懂的说法说明一下
有个源文件 要进行拷贝,这个就好比是上车的人,byte[] 就是那辆车,这辆车起初没人 len= 0; 后面陆续有人上车了,就是字节陆续传输上来了,然后 在开的过程中,有人不断下车 就是写出 ,知道车上的人没有了为止。
最后呢? 快到站的时候,我们要叫还没下车的赶紧下车,就要flush()一下。因为我们要到站了,最后呢,把前门 ,后门都关闭 。

代码如下

  package cn.hjm.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyFile {

public static void main(String[] args) throws IOException {
    
    //1.建立联系 源头文件(真实存在并且是文件不能是文件夹)和目的文件
    File file = new File("C:\\Users\\hjm\\Desktop\\a.png");
    //2.目标文件
    File dest = new File("C:\\Users\\hjm\\Desktop\\b.png");
    
    //3.选择流,输入和输出流
    InputStream is = new FileInputStream(file);
    OutputStream os = new FileOutputStream(dest);
    
    //4.准备车子
    byte[] b = new byte[1024];
    int len=0; //假装车上没人
    
    //开始上车
    try {
        while(-1!=(len=is.read(b))){ //当车子没有满的话继续上车,车子一边开就一边有人下车
            os.write(b, 0, len); //从0开始慢慢把人放下车去,有多少人放多少人
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally{
        os.flush();//还有不想下车的赶紧催下车
        is.close();//本趟车前面要关闭了
        os.close();//本趟车后门要准备关闭了
    }
    
}

}

最后我将这个进行了封装,做成了一个工具类
FileUtil.java
传送门[FileUtil-文件拷贝]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值