Java IO流--使用缓冲流实现非文本文件和文本文件的复制

简介: Java IO流--使用缓冲流实现非文本文件和文本文件的复制

处理流之一:缓冲流

缓冲流:

BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter

作用:

提高流的读取,写入的速度。

提高读写速度的原因:内部提供了一个缓冲区。

处理流就是’'套接"在已有的流的基础上

上代码:

注释都已经在代码中给出

一、实现非文本文件的复制操作

@Test
    public void test1() {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            //1.造文件
            File file = new File("工作二维码.png");
            File file1 = new File("工作二维码2.png");
            //2.造流
            //2.1造节点流
            FileInputStream fis = new FileInputStream(file);
            FileOutputStream fos = new FileOutputStream(file1);
            //2.2造缓冲流
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos);
            //3.复制的细节:读取,写入
            byte[] buffer = new byte[5];
            int len;
            while ((len = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
            }
        } catch (Exception e) {
                e.printStackTrace();
        } finally {
            //4.关闭资源
            //要求:先关闭外层的流,再关闭内层的流
            //在关闭外层流的同时,内层的流也会自动关闭,所以关于内层流的关闭,我们可以省略。
            if (bis !=null){
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bos!=null){
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

一、BufferedWriter的使用代码如下:

/**
 * 演示BufferedWriter的使用
 */
public class BufferedWriter_ {
    public static void main(String[] args) {
        String filePath = "D:\\ok.txt";
        BufferedWriter bufferedWriter = null;
        try {
            //1.new FileWriter(filePath,true) 表示以追加的方式写入
            //2.new FileWriter(filePath) 表示以覆盖的方式写入
            bufferedWriter = new BufferedWriter(new FileWriter(filePath));
            bufferedWriter.write("hello,北京!");
            bufferedWriter.newLine(); //插入一个和系统相关的换行符
            bufferedWriter.write("hello1,北京!");
            bufferedWriter.newLine(); //插入一个和系统相关的换行符
            bufferedWriter.write("hello2,北京!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bufferedWriter != null) {
                    bufferedWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

二、BufferedReader的使用详解代码如下:

/**
 * 演示BufferedReader的使用
 */
public class BufferedReader_ {
    public static void main(String[] args) {
        String filePath = "D:\\story.txt";
        //创建BufferedReader
        BufferedReader bufferedReader = null;
        try {
            bufferedReader = new BufferedReader(new FileReader(filePath));
            //读取
            String line; //按行读取,效率高
            //说明
            //1.bufferedReader.readLine() 是按行读取文件
            //2.当返回null时,表示文件读取完毕
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bufferedReader != null) {
                    //关闭流,这里注意,只需要关闭BufferedReader,因为底层会自动去关闭节点流FileReader。
                    /**
                     * public void close() throws IOException {
                     *         synchronized (lock) {
                     *             if (in == null)
                     *                 return;
                     *             try {
                     *                 in.close();//in 就是我们传入的 new FileReader(filePath),关闭了。
                     *             } finally {
                     *                 in = null;
                     *                 cb = null;
                     *             }
                     *         }
                     *     }
                     */
                    bufferedReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

使用BufferedWriter和BufferedReader实现文本文件的复制

@Test
    public void testBufferedReaderBufferedWriter() {
        BufferedReader bufferedReader = null;
        BufferedWriter bufferedWriter = null;
        try {
            //创建文件和相应的缓冲流
            bufferedReader = new BufferedReader(new FileReader(new File("学习记录.txt")));
            bufferedWriter = new BufferedWriter(new FileWriter(new File("学习记录4.txt")));
            //复制文件:读取和写入
            //方式一:使用char[]数组
//            char[] chars = new char[1024];
//            int len;
//            while ((len = bufferedReader.read(chars)) != -1) {
//                bufferedWriter.write(chars, 0, len);
//            }
            //方式二:使用String
            String data;
            while ((data=bufferedReader.readLine())!=null){
//                bufferedWriter.write(data+"\n");
                bufferedWriter.write(data);//data中不包含换行符
                bufferedWriter.newLine();//提供换行的操作
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bufferedWriter != null) {
                try {
                    bufferedWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


目录
相关文章
|
5月前
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
182 0
|
2月前
|
人工智能 缓存 自然语言处理
Java与多模态AI:构建支持文本、图像和音频的智能应用
随着大模型从单一文本处理向多模态能力演进,现代AI应用需要同时处理文本、图像、音频等多种信息形式。本文深入探讨如何在Java生态中构建支持多模态AI能力的智能应用。我们将完整展示集成视觉模型、语音模型和语言模型的实践方案,涵盖从文件预处理、多模态推理到结果融合的全流程,为Java开发者打开通往下一代多模态AI应用的大门。
384 41
|
2月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
204 1
|
4月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
4月前
|
SQL Java 数据库连接
Java IO流(一):字节流与字符流基础
本文全面解析Java IO流,涵盖字节流、字符流及其使用场景,帮助开发者理解IO流分类与用途,掌握文件读写、编码转换、异常处理等核心技术,通过实战案例提升IO编程能力。
|
5月前
|
存储 Java Linux
操作系统层面视角下 Java IO 的演进路径及核心技术变革解析
本文从操作系统层面深入解析Java IO的演进历程,涵盖BIO、NIO、多路复用器及Netty等核心技术。分析各阶段IO模型的原理、优缺点及系统调用机制,探讨Java如何通过底层优化提升并发性能与数据处理效率,全面呈现IO技术的变革路径与发展趋势。
133 3
|
5月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
291 14
|
5月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
160 0
|
6月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
500 5
|
5月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
378 0