Java中的文件字节流(万能流)

目录

1. 如何理解文件字节流?

File类

文件字节流

2. 基础概念(文件专属)

FileInputStream

FileOutputStream

3. FileInputStream流的基本方法

1)继承关系:

2)构造方法

3)常用的具体方法

4. FileOutputStream流的基本方法

1)继承关系

2)构造方法

3)常用的具体方法

5. 万能流的异常问题:(需要注意的地方)

6. 案例: 实现文件复制(使用字节流)

案例总结:(4个步骤)

1.进行异常控制

2.创建输入流或输出流对象

3.进行读或写操作

4.关闭流

摘要:本文讲解了java中的文件字节流,也就是我们常说的万年流,包括文件字节输入流(FileInputStream)和文件字节输出流(FileOutputStream)的内容,这里会讲解这两种流的构造方法和常用方法,后面还有一个案例来理解文件字节流。

万能流:任何类型的文件都可以采用该流(输入流或输出流)来读或写

1. 如何理解文件字节流?

首先,文件?File?对文件进行操作?以什么样的形式?

File类

对文件和目录的本身进行操作,不能对文件内容操作。

它完成的操作是:

创建文件,删除文件,判断·某个文件或目录是否存在,获取文件的长度等。

文件字节流

是对文件里的内容进行读和写操作

2. 基础概念(文件专属)

FileInputStream

文件字节输入流:java.io.FileInputStream

继承自InputStream的流,以字节的方式读取文件的内容

FileOutputStream

文件字节输入流:java.io.FileOutputStream

继承自OutputStream的流,以字节的方式将内容写入文件

注:1个字节 = 8个二进制位

文件是存储在硬盘中的,而程序是运行在内存中的。

输入流:从硬盘读取到内存中

输出流:从内存写入到硬盘中

3. FileInputStream流的基本方法

java.io.FileInputStream类

1)继承关系:

2)构造方法

3)常用的具体方法

4. FileOutputStream流的基本方法

java.io.FileOutputStream类

1)继承关系

2)构造方法

3)常用的具体方法

5. 万能流的异常问题:(需要注意的地方)

1)当创建FileInputStream流对象时,出现文件路径或文件对象错误时,会引发FileNotFoundException异常

2)而FileOutputStream 的创建不依赖于文件是否存在,如果没有这个文件,会新建该文件;但是需要注意的是,当该文件的父级目录不存在时,会报FileNotFoundException;如果打开只读文件的话,会报IOException异常。

6. 案例: 实现文件复制(使用字节流)

package cn.sz.gl.test05;
​
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 Test {
​
    public static void copyFileByStream(File source, File target) {
        // 判断源文件是否存在,如果不存在,就退出程序
        if (!source.exists()) {
            System.out.println("源文件不存在,程序退出");
            System.exit(0);
        }
        // target.getParentFile()表示用来获取目标对象的父目录对象
        // 如果目标文件路径不存在,就创建
        if (!target.getParentFile().exists()) {
            target.getParentFile().mkdirs();
        }
​
        InputStream is = null;
        OutputStream os = null;
​
        try {
            // 准备输入流
            is = new FileInputStream(source);
            // 准备输出流
            os = new FileOutputStream(target);
            // 准备一个数组,用来存放读写的数据
            byte[] b = new byte[1024];
            int len = 0;
            // read(b)实现读取操作,数据存入b数组,返回读取长度给len,当所有内容都读取完毕,len=-1
            while ((len = is.read(b)) != -1) {
                // 实现写的操作
                os.write(b, 0, len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
                if (os != null) {
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
​
    }
​
    // 将source文件对象的内容读出来,同时完成将读出来的内容写入的target文件对象中
    public static void main(String[] args) {
        File source = new File("D:\\java\\Java高级\\myfile\\a.txt");
        File target = new File("D:\\java\\Java高级\\myfile\\b.txt");
        copyFileByStream(source, target);
    }
}

案例总结:(4个步骤)

1.进行异常控制

2.创建输入流或输出流对象

3.进行读或写操作

4.关闭流

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值