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

简介: 字节流写数据加异常处理、字节流读数据、复制文本文件及复制图片的简单示例

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

异常处理格式

try-catch-finally:

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

image.gif

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();
                }
            }
        }
    }
}

image.gif

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

字节输入流:

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();
    }
}

image.gif

三、字节流复制文本文件

需求:

把“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();
    }
}

image.gif

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

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

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();
    }
}

image.gif

五、字节流复制图片

案例需求:

把“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();
    }
}

image.gif

目录
相关文章
|
前端开发 C#
WPF 曲线图表控件(自制)(一)
原文:WPF 曲线图表控件(自制)(一) 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/koloumi/article/details/77509283 由于公司需要所以自写了一个简单的曲线图表控件,在此分享。
2231 0
|
10月前
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
234 11
|
Linux
linux 下 打包并使用xz 压缩
linux 下 打包并使用xz 压缩
100 1
|
安全 Devops 开发工具
DevOps设计规划之Coding
Repo仓库命名规范。 A great love for sharing knowledge
454 0
DevOps设计规划之Coding
|
JavaScript 安全 开发者
重新认识number类型
重新认识number类型
332 0
|
存储 算法 Java
【刷题之路 | Java & Python】两数之和(暴力枚举&哈希表)
【刷题之路 | Java & Python】两数之和(暴力枚举&哈希表)
【刷题之路 | Java & Python】两数之和(暴力枚举&哈希表)
OpenJudge计算概论-最大奇数与最小偶数之差的绝对值
/*============================================================= 最大奇数与最小偶数之差的绝对值 总时间限制: 1000ms 内存限制: 65536kB 描述 输入6个正整数,且这6个正整数中至少存在一个奇数和一个偶数。
1251 0
|
3天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。