字节流写数据加异常处理、字节流读数据、复制文本文件及复制图片

110 阅读4分钟

​ 开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情

目录

一、字节流写数据加异常处理

二、字节流读数据(一次读一个字节数据)

三、字节流复制文本文件

四、字节流读数据(一次读一个字节数组数据)

五、字节流复制图片


一、字节流写数据加异常处理

异常处理格式

try-catch-finally:

try{
    可能出现异常的代码; 
}catch(异常类名 变量名){ 
    异常的处理代码; 
}finally{ 
    执行所有清除操作; 
}

finally特点:

被finally控制的语句一定会执行,除非JVM退出

示例代码:

public class FileOutputStreamDemo04 {
    public static void main(String[] args) {
        //加入finally来实现释放资源 
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("myByteStream\fos.txt");
            fos.write("hello".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

二、字节流读数据(一次读一个字节数据)

字节输入流:

FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名

字节输入流读取数据的步骤:

● 创建字节输入流对象

● 调用字节输入流对象的读数据方法

● 释放资源

示例代码:

public class FileInputStreamDemo01 {
    public static void main(String[] args) throws IOException {
        //创建字节输入流对象 
        //FileInputStream(String name) 
        FileInputStream fis = new FileInputStream("myByteStream\fos.txt");

        int by; 

        /* 
            fis.read():读数据 
            by=fis.read():把读取到的数据赋值给by 
            by != -1:判断读取到的数据是否是-1 
        */
        while ((by=fis.read())!=-1) {
            System.out.print((char)by);
        }

        //释放资源 
        fis.close();
    }
}

三、字节流复制文本文件

需求:

把“E:\itcast\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt”

实现步骤:

复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源),然后写入到另一个文件中(目的地)

数据源:E:\itcast\窗里窗外.txt --- 读数据 --- InputStream --- FileInputStream

目的地:myByteStream\窗里窗外.txt --- 写数据 --- OutputStream --- FileOutputStream

代码实现:

public class CopyTxtDemo {
    public static void main(String[] args) throws IOException {
        //根据数据源创建字节输入流对象 
        FileInputStream fis = new FileInputStream("E:\itcast\窗里窗外.txt");

        //根据目的地创建字节输出流对象 
        FileOutputStream fos = new FileOutputStream("myByteStream\窗里窗外.txt");

        //读写数据,复制文本文件(一次读取一个字节,一次写入一个字节) 
        int by;
        while ((by=fis.read())!=-1) {
            fos.write(by);
        }

        //释放资源 
        fos.close();
        fis.close();
    }
}

四、字节流读数据(一次读一个字节数组数据)

一次读一个字节数组的方法:

public int read(byte[] b):从输入流读取最多b.length个字节的数据

返回的是读入缓冲区的总字节数,也就是实际的读取字节个数

示例代码:

public class FileInputStreamDemo02 {
    public static void main(String[] args) throws IOException {
        //创建字节输入流对象 
        FileInputStream fis = new FileInputStream("myByteStream\fos.txt"); 

        /* 
            hello\r\n 
            world\r\n 
            第一次:hello 
            第二次:\r\nwor 
            第三次:ld\r\nr 
        */

        byte[] bys = new byte[1024]; //1024及其整数倍 
        int len;
        while ((len=fis.read(bys))!=-1) {
            System.out.print(new String(bys,0,len));
        }

        //释放资源 
        fis.close();
    }
}

五、字节流复制图片

案例需求:

把“E:\itcast\mn.jpg”复制到模块目录下的“mn.jpg”

实现步骤:

● 根据数据源创建字节输入流对象

● 根据目的地创建字节输出流对象

● 读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)

● 释放资源

代码实现:

public class CopyJpgDemo {
    public static void main(String[] args) throws IOException {
        //根据数据源创建字节输入流对象 
        FileInputStream fis = new FileInputStream("E:\itcast\mn.jpg");
        //根据目的地创建字节输出流对象 
        FileOutputStream fos = new FileOutputStream("myByteStream\mn.jpg");

        //读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组) 
        byte[] bys = new byte[1024];
        int len;
        while ((len=fis.read(bys))!=-1) {
            fos.write(bys,0,len);
        }

        //释放资源 
        fos.close();
        fis.close();
    }
}