Java IO流操作

IO字节输入流体系结构图

在这里插入图片描述

FileInputStream示例
    public static void test1() throws Exception {
        // 输入流: 将硬盘中的数据输入到内存中
        FileInputStream fileInputStream = new FileInputStream("拉拉.txt");
        int i = 0;
        // 每读取一个字节,read()方法中相当于有一个指针向下移动
        while ((i = fileInputStream.read()) != -1) {
            System.out.println((char) i);
        }
        // 释放资源
        fileInputStream.close();
    }

需要读取文件和对文件进行写操作前,需要处理FileNotFoundException异常;对文件进行读取和写操作时,需要处理IOException异常。可以使用try…catch…finally进行处理异常,在finally代码块中进行流资源关闭操作。

FileOutputStream代码示例
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream("拉拉.txt", true);
            String s = "hello world";
            fileOutputStream.write(s.getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileOutputStream != null) {
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            fileOutputStream = null;
        }
1、获取到文件
2、将需要的文字进行写入
3、处理异常,并关闭流资源

写入文件的write()方法有三种重载的方法,如下:

// 将b.length字节从byte数组中写入文件
void write(byte[] b)

// 从指定byte数组中从偏移量为off开始写入len个字节写入文件
void write(byte[] b, int off, int len)

// 写入指定字节到文件中
void write(int b)

相应的字节输入流的read()方法也有相对应的重写方法,如下:

// 从输入流中读取一个数据字节到内存中
int read()

// 从输入流中一次最多读取b.length个字节到byte[]数组中
int read(byte[] b)

// 从输入流中间最多len个字节的数据读入byte[]数组中
int read(byte[], int off, int len)
利用字节输入输出流进行图片文件的复制
    public static void test3(){
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
        	// 初始化FileInputStream和FileOutputStream对象
            fileInputStream = new FileInputStream("F:\\1.jpeg");
            fileOutputStream = new FileOutputStream("E:\\2.jpeg");
            
            // 定义一个byte[]数组,用作字节输入流缓冲区
            byte[] bytes = new byte[1024 * 2];
            int i = 0;
            // 输入流读取bytes个字节
            while ((i = fileInputStream.read(bytes)) != -1){
            	// 输出流每次写入i个字节
                fileOutputStream.write(bytes, 0, i);
                fileOutputStream.flush();
            }
        } catch (FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e){
            e.printStackTrace();
        } finally {
            if (fileInputStream != null){
                try {
                    fileInputStream.close();
                } catch (IOException e){
                    e.printStackTrace();
                }
            }
            if (fileOutputStream != null){
                try {
                    fileOutputStream.close();
                } catch (IOException e){
                    e.printStackTrace();
                }
            }
            // 手动将流资源关闭,加快jvm的gc对资源的回收
            fileInputStream = null;
            fileOutputStream = null;
        }
    }
字节流的优缺点
	1、只要文件路径没错、最后流资源完全关闭,一般不会出错
	2、对任何文件都能进行操作(计算机底层存储文件是以二进制存储的,而流操作操作的是文件的字节)
	3、相较于字符流操作,读取和写入的效率不高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值