花几千上万学习Java,真没必要!(三十七)

news2024/9/21 4:35:49

IO 流:

读取数据到内存的过程:可以包括从硬盘、网络或其他存储设备中将数据加载到内存中,以便程序能够访问和处理这些数据。
写入数据到硬盘的过程:通常是将内存中的数据保存到硬盘或其他持久性存储设备中,以便长期存储或备份数据。

IO :输入/输出(Input/Output)
流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输,IO 流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载。


第一、IO 流的分类
按照数据的流向
输入流:读数据
输出流:写数据


第二、按照数据类型来分类
字节流
字节输入流
字节输出流

字符流
字符输入流
字符输出流


IO 流的使用场景
如果操作的是纯文本文件,优先使用字符流
如果操作的是图片、视频、音频等二进制文件。优先使用字节流。
如果不确定文件类型,优先使用字节流。字节流是万能的流。

测试代码1:

import java.io.FileOutputStream;  
import java.io.IOException;  
//字节流抽象基类
//InputStream :这个抽象类是表示字节输入流的所有类的超类
//OutputStream :这个抽象类是表示字节输出流的所有类的超类
//子类名特点:子类名称都是以其父类名作为子类名的后缀
//字节输出流
//FileOutputStream(String name) :创建文件输出流以指定的名称写入文件
//使用字节输出流写数据的步骤
//创建字节输出流对象 (调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
//调用字节输出流对象的写数据方法
//释放资源 (关闭此文件输出流并释放与此流相关联的任何系统资源)  
public class FileOutputStreamExample {  
    public static void main(String[] args) {  
        // 指定要写入的文件名  
        String fileName = "example.txt";  
  
        // 使用try-with-resources语句自动管理资源  
        try (FileOutputStream fos = new FileOutputStream(fileName)) {  
            // 要写入的文本  
            String text = "Hello, World! This is a test file.";  
  
            // 将文本转换为字节数组  
            byte[] bytes = text.getBytes();  
  
            // 写入字节数组到文件  
            fos.write(bytes);  
  
            // 不需要显式调用fos.close(),try-with-resources会自动处理  
            System.out.println("Data written to " + fileName + " successfully.");  
        } catch (IOException e) {  
            // 如果发生I/O错误,则捕获异常并打印堆栈跟踪  
            e.printStackTrace();  
        }  
  
        // try-with-resources块之后,fos已经被自动关闭。  
    }  
}

测试代码2:

package iotest.com;
import java.io.FileOutputStream;  
import java.io.IOException;  
  
public class FileOutputStreamTest {  
    public static void main(String[] args) {  
        String fileName = "example.txt";  
  
        // 写入单个字节  
        try (FileOutputStream fosSingleByte = new FileOutputStream(fileName)) {  
            fosSingleByte.write(65); // ASCII码65对应字母'A'  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
  
        // 写入字节数组  
        byte[] byteArray = "Hello, World!".getBytes();  
        try (FileOutputStream fosByteArray = new FileOutputStream(fileName, true)) { // 追加模式  
            fosByteArray.write(byteArray);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
  
        // 写入字节数组的一部分  
        byte[] partOfByteArray = " New Line!".getBytes();  
        try (FileOutputStream fosPartOfArray = new FileOutputStream(fileName, true)) { // 继续追加  
            // 写入换行符  
            fosPartOfArray.write("\n".getBytes());  
            // 写入字节数组的一部分  
            fosPartOfArray.write(partOfByteArray, 0, partOfByteArray.length);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}

测试代码3:Copy文本

package iotest.com;
import java.io.File;
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
//复制文本文件,把文本文件的内容从一个文件中读取出来 (数据源),然后写入到另一个文件中
//数据源:
//E:\\Test\\a.txt 读数据:InputStream -->FileInputStream
//目的地:
//D:\\AA\\a.txt 写数据: OutputStream -->FileOutputStream 
public class FileCopyExample {  
    public static void main(String[] args) {  
        String sourceFile = "E:\\Test\\a.txt";  
        String destFile = "D:\\AA\\a.txt";  
  
        // 检查目标目录是否存在,如果不存在则创建它  
        File destDir = new File("D:\\AA");  
        if (!destDir.exists()) {  
            destDir.mkdirs(); // 创建目录结构  
        }  
  
        FileInputStream fis = null;  
        FileOutputStream fos = null;  
  
        try {  
            // 创建FileInputStream对象  
            fis = new FileInputStream(sourceFile);  
              
            // 创建FileOutputStream对象  
            fos = new FileOutputStream(destFile);  
  
            // 读取和写入数据  
            byte[] buffer = new byte[1024]; // 创建一个缓冲区  
            int length;  
            while ((length = fis.read(buffer)) > 0) { // 读取到文件末尾  
                fos.write(buffer, 0, length); // 写入读取到的数据  
            }  
  
            // 刷新输出流,确保所有数据都被写入文件  
            fos.flush();  
  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            // 关闭流  
            try {  
                if (fis != null) fis.close();  
                if (fos != null) fos.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
}  

测试代码4:Copy图片

package iotest.com;
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
  
public class CopyImage {  
    public static void main(String[] args) {  
        String sourceFile = "E:\\Test\\a.jpg";  
        String destFile = "D:\\AA\\a.jpg";  
  
        // 检查目标目录是否存在,如果不存在则创建它  
        java.io.File destDir = new java.io.File("D:\\AA");  
        if (!destDir.exists()) {  
            destDir.mkdirs(); // 创建目录结构  
        }  
  
        FileInputStream fis = null;  
        FileOutputStream fos = null;  
        //读取次数并不直接对应于读取的字节总数。
        //例如,如果文件大小不是1024的整数倍,那么最后一次读取可能会读取少于1024个字节的数据,但读取次数仍然会增加1。
        int readCount = 0; // 读取次数计数器 
        try {  
            // 创建FileInputStream对象  
            fis = new FileInputStream(sourceFile);  
              
            // 创建FileOutputStream对象  
            fos = new FileOutputStream(destFile);  
  
            // 读写数据  
            byte[] buffer = new byte[1024]; // 创建一个1024字节的缓冲区  
            int bytesRead;  
            while ((bytesRead = fis.read(buffer)) != -1) { // 读取到文件末尾时返回-1  
                fos.write(buffer, 0, bytesRead); // 写入读取到的数据,注意只写入实际读取到的字节数  
                readCount++; // 每次读取后增加计数器  
            }  
  
            // 刷新输出流,FileOutputStream这一步是可选的,close()会调用flush() 。 
            // fos.flush();  
            System.out.println("Total read operations: " + readCount); // 打印读取次数  
  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            // 关闭流  
            try {  
                if (fis != null) fis.close();  
                if (fos != null) fos.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
}

测试代码5:字节缓冲流

package iotest.com;
import java.io.BufferedInputStream;  
import java.io.BufferedOutputStream;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
  
public class BufferedStreamDemo {  
  
    public static void main(String[] args) {  
        // 指定文件路径  
        String filePath = "E:\\Test\\a.txt";  
  
        // 使用try-with-resources语句自动关闭资源  
        try (  
            // 创建BufferedOutputStream,用于向文件写入数据  
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));  
        ) {  
             byte[] data = "Hello, Buffered Streams!".getBytes();  
            // 写入数据到文件  
            bos.write(data);  
            System.out.println("Data written to file successfully.");  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
  
        // 再次使用try-with-resources语句读取文件内容  
        try (  
            // 创建BufferedInputStream,用于从文件读取数据  
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));  
        ) {  
            // 用于存储从文件中读取的数据  
            byte[] buffer = new byte[1024];  
            // 用于记录实际读取的字节数  
            int bytesRead;  
            // 读取文件内容  
            while ((bytesRead = bis.read(buffer)) != -1) {  
                // 打印读取到的数据  
                System.out.write(buffer, 0, bytesRead);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}

测试代码6:用字节缓冲流Copy视频。

package iotest.com;
import java.io.BufferedInputStream;  
import java.io.BufferedOutputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
  
public class TestCopyVideo {  
  
    public static void main(String[] args) {  
        String sourceFile = "E:\\Test\\a.avi";  
        String destinationFile = "D:\\AA\\a.avi";  
  
        // 确保目标目录存在  
        File destinationDir = new File(new File(destinationFile).getParent());  
        if (!destinationDir.exists()) {  
            destinationDir.mkdirs(); // 创建目录,包括所有必需的但不存在的父目录  
        }  
  
        // 使用try-with-resources自动关闭流  
        try (  
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFile));  
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destinationFile))  
        ) {  
            byte[] buffer = new byte[1024]; // 创建一个字节数组作为缓冲区  
            int bytesRead;  
  
            // 从源文件读取数据到缓冲区,然后写入到目标文件  
            while ((bytesRead = bis.read(buffer)) != -1) {  
                bos.write(buffer, 0, bytesRead);  
            }  
  
            System.out.println("文件复制成功!");  
        } catch (IOException e) {  
            e.printStackTrace();  
            System.out.println("文件复制失败!");  
        }  
    }  
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1965134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【香橙派系列教程】(四)基于ARM-Linux架构的语音控制刷抖音项目

【四】基于ARM-Linux架构的语音控制刷抖音项目 文章目录 【四】基于ARM-Linux架构的语音控制刷抖音项目1.语音模块配置1.创建产品2.引脚配置3.词条定义4.添加控制5.发布版本6.烧录固件 2.编程实现语音和开发板通信3.手机接入Linux热拔插1.dmesg命令2.adb调试踩坑问题 3.总结 4.…

Day14-Servlet后端验证码的实现

图片验证码的生成采用的是Kaptcha; Kaptcha是一个高度可配置的验证码生成工具,由Google开源。它通过一系列配置文件和插件,实现了将验证码字符串自动转换成图片流,并可以与session进行关联,从而在验证过程中使用&#…

如何快速进行视频截屏?5个软件帮助你快速截屏

如何快速进行视频截屏?5个软件帮助你快速截屏 截取视频屏幕是一项常见的任务,无论是为了制作教学视频、分享有趣的片段,还是保存重要的画面。以下是五款好用的软件,能够帮助你快速进行视频截屏。 迅捷视频转换器 这款软件不单…

EF8 code first 模式下去除自动生成表加s(复数形式)全网第一帖

前言: 今天下午一直在纠结这个问题,EF如果采用code first模式,进行迁移,他会表名自动给你加上s形成复数形式,搜了很久找到的觉方案有两种,其中实体类指定表名的方法是可行的,另外一种都是说 modelBuilder.…

昇思25天学习打卡营第XX天|LSTM+CRF序列标注

条件随机场(CRF)是一种用于序列预测的概率图模型,它考虑了序列中元素之间的相互依赖关系。与简单的多分类问题不同,CRF能够捕捉序列中标签的连贯性,如在命名实体识别中,一个词的标签往往依赖于它前面词的标…

【JDK11和JDK8并行与切换】

一、JDK11安装 1、下载jdk11,点击.exe安装在:C:\Program Files\Java\jdk-11\ 2、配置JAVA_HOME 变量名为JAVA_HOME 变量值为jdk安装路径 3、配置PATH 找到系统变量里的PATH 双击或者单击后点击编辑 点击右上角的新建 新建两条 %JAVA_HOME%\bin …

详细介绍Linux iftop 的结果如何查看

目录 1. 安装 iftop 2. 运行 iftop 3. iftop 界面详解 3.1 标题栏 3.2 流量显示区域 3.3 汇总信息 3.4 底部栏 4. 常用选项和快捷键 4.1 常用选项 4.2 常用快捷键 5. 实际案例 6. 真实排查网络【下行带宽过高】问题案例 6.1 【定义出口ip和端口】iftop -P 在流出服…

漏洞打靶AI-web1.0

下载安装靶机后要进行靶机ip的确定,具体步骤可以查看我的上一篇博客,这里就不细说了。 在物理机访问靶机IP地址进入这样一个页面,我们发现这里没有输入框也没有点击按钮,导致我们无处下手,不过我们还可以用工具去扫描…

无人机之社区管理篇

在社区管理中,无人机的应用更是为传统的管理方式带来了革新与便利。 一、安全监控与巡逻 无人机可以配备高清摄像头和红外传感器,进行24小时不间断的监控和巡逻。在社区中,无人机可以用于检测公共区域的安全状况,及时发现异常情况…

【C语言】处理文件错误:详解 strerror, perror, 和 fopen

🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html ⚙️操作环境:Visual Studio 2022 目录 一、引言 二、fopen 函数 解释: 1. 函数原型 2. 参数 3. 代码示例 三、strerror …

形象设计大赛活动方案策划

一、活动流程 1、个人创意服装展示(30分):选手自备服装,要能展示现代大学生青春、时尚,富有内涵的高雅气质和礼仪风范(如:校园装、运动装、休闲装和职业装)。 由评委评判出对选手的第一印象分。…

代码随想录二刷(哈希表)

代码随想录二刷(哈希表) 三数之和思路反正对于我来说是真的难想出来。 若这道题还是采用哈希表的思路去做,非常麻烦,并且还要考虑去重的操作。所以这道题其实用双指针,是更方便的。 具体程序如下: class Solution:def threeSu…

SPON IP网络对讲广播系统的命令执行漏洞复现实验

第一步:使用fofa搜索语句搜索 fofa地址:网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知 - FOFA网络空间测绘系统 查询漏洞的语句icon_hash"-1830859634" 第二步:访问网址&…

LangChain大模型应用开发指南-传统编程范式思维的应用

LangChain大模型应用开发指南-传统编程范式思维的应用 上节课,我带领小伙伴们完成了baichuan2量化模型的OpenAI标准接口封装,并完成LangChain对大模型的调用与测试。 今天我们将正式开始LangChain大模型应用开发课程。 组件总览 上图为LangChain的组件与…

软件工程之应用数学

软件工程之应用数学 第 20 章:应用数学20.1 运筹方法20.1.1 网络计划技术20.1.2 线性规划20.1.3 决策论20.1.4 对策论 20.2 数学建模 第 20 章:应用数学 数学是一种严谨、缜密的科学,学习应用数学知识,可以培养系统架构设计师的抽…

机器学习三步走:手写BP神经网络(入门) --> 基于TensorFlow框架开发(开发) --> 基于预训练模型快速构建应用(应用)

目录 前言第一步:手写BP神经网络1 概念简介1.1 神经网络内的概念1.2 神经网络外的概念 2 类BPNetwork2.1 初始化2.2 激活函数2.2.1 Sigmod2.2.2 Linear2.2.3 Sigmod_derivative 2.3 损失函数2.4 前向传播2.5 后向传播2.6 训练模型2.7 预测2.8 绘制损失值变化曲线 **…

实验 19. 用户进程

已完成实验 已完成实验链接 简介 实验 19. 用户进程 总结 main函数创造了1个主线程,两个内核线程,两个用户进程。共5个PCB,进程PCB->pgdir为进程自己的页表首虚拟地址,线程为null。因此本次实验是五个进/线程在来回切换。他…

抖音素材网站有哪些?这几个高质量的抖音无水印素材网站分享

在抖音这个视觉与创意并重的平台上,选择合适的无水印视频素材是提升内容质量的关键。如果你正在寻找既能使你的视频内容更具吸引力,又能避免版权问题的优质素材,那么本文将为你详细介绍几个高质量的抖音无水印素材网站。从国内的蛙学网到国际…

双指针算法大总结!!看完这篇再也没有难的双指针题!!例题C++解法!

题源acwing、力扣 讲解双指针题目一:盛最多水的容器思路AC代码 题目二:查找总价格为目标值的两个商品思路AC代码 题目三:链表的中间节点思路AC代码 题目四:环形链表思路AC代码 题目五:反转字符串中的元音字符思路AC代码…

【Vulnhub靶场AI-WEB-1.0打靶教程】

第一步:查看虚拟机的ip 第二步:扫描ip下开放的80端口 第三步:扫描查到的ip地址下的目录 第四步:访问查到的目录 访问robot.txt 第五步:访问robot.txt显示出的目录 第六步:打开kali终端,使用sqlmap功能 sq…