Java第十一天(实训学习整理资料(十)Java IO流)

news2024/11/7 7:01:56

目录

一、说明

二、Java中的IO操作分类

三、字符流

1、Writer

2、FileWriter

3、Reader

四、字节流

1、主要的类

2、FileOutputStream 文件字节输出流

3、FileInputStream 文件字节输入流

五、装饰器

1、BufferedInputStream

2、BufferedOutputStream

3、BufferedReader

4、BufferedWriter

六、系统流


一、说明

        I: Input 输入 ​

        O: Output 输出

输入和输出的方向:

        输入(Input): 从其他的资源读取数据到java程序。

        输出(Output):从java程序写出数据到其他资源载体。

二、Java中的IO操作分类

1、以字符作为最小单位进行操作,本质仍然是字节流(字符流)

2、以字节作为最小单位操作(字节流)

java中io操作的接口:

                                输入                 输出

字节流         - InputStream         - OutputStream

字符流         - Reader                 - Writer

三、字符流

1、Writer

        Writer是字符输出流:

                Writer是一个抽象类,不能直接使用,需要通过它的已知实现类操作

                操作的是文件 - Writer - OutputStreamWriter - FileWriter

2、FileWriter

构造方法:

        FileWriter(File file)

        FileWriter(File file, boolean append)

        FileWriter(String fileName)

        FileWriter(String fileName, boolean append)

说明:

        append 表示是否打开追加模式,

        true 表示将当前内容追加到原文件的末尾

        false 表示用当前内容重写原文件

常用方法:

        void write(int c);

        void write(char[] cbuf);

        void write(char[] cbuf, int off, int len);

        void write(String str);

        void write(String str, int off, int len);

说明:

        wite方法,不会立即将数据写入磁盘的文件中,而是先写入到缓冲区,目的是为了提高效率,当缓冲区满了后,数据会流入文件;如果不希望数据留在缓冲,则可以调用flush方法,立即刷新。

刷新缓冲区:

        void flush() //刷新缓冲区

关闭文件输出流:

        在关闭流时会自动调用flush方法

        void close()

3、Reader

Reader是字符输入流;

继承关系:Reader - InputStreamReader - FileReader

构造方法:

        FileReader(File file) //接受一个File对象

        FileReader(String fileName)//接受一个文件的路径字符串

常用方法:

        read() //读取第一个字符

        read(char[] cbuf, int offset, int length)

        read(char[] cbuf)

        read(CharBuffer target)

关闭文件输入流:

        void close();

案例:读取文件内容

//构建文件输入流 FileReader
        FileReader fileReader = new FileReader("D:" + PS + "test" + PS + "out.txt");
        char[] chars = new char[4];
        int readChars = 0;
        while ((readChars = fileReader.read(chars))!=-1){
            String str = new String(chars, 0, readChars);
            System.out.println(str);
        }
        fileReader.close();

练习:

1、利用File实现递归删除,写死。

2、统计工作空间下Java文件,并输出代码行数

3、复制文件

四、字节流

1、主要的类

        InputStream

        OutputStream

字符流的底层也是基于字节流实现,字节流比较通用。

2、FileOutputStream 文件字节输出流

构造方法:

        FileOutputStream(String name, boolean append)

        FileOutputStream(File file, boolean append)

常用方法:

        write(byte b[])

案例代码:

//定义文件路径
		  String path = "E:\\java72_projects\\java-api\\src\\cn\\hxzy\\apimod\\day08\\files\\erro.log";

		  FileOutputStream fileOutputStream = null;

		  try {
			  //打开文件
			  fileOutputStream = new FileOutputStream(path);

			  //操作文件
			  String content = "hello java,欢迎使用idea!";
			  fileOutputStream.write(content.getBytes("UTF-8"));
			  //fileOutputStream.flush();

		  } catch (Exception e) {
			  e.printStackTrace();
		  } finally {
			  //关闭文件
			  if(fileOutputStream != null) {
				  try {
					  fileOutputStream.close();
				  } catch (IOException e) {
					  e.printStackTrace();
				  } finally {
					  fileOutputStream = null;
				  }
			  }
		  }
3、FileInputStream 文件字节输入流

构造方法:

        FileInputStream(File file)

        FileInputStream(String name)

常用方法:

        int read()

        int read(byte[] b)

案例代码:

//定义文件路径
		  String path = "E:\\java72_projects\\java-api\\src\\cn\\hxzy\\apimod\\day08\\files\\erro.log";
		  String path1 = "E:\\java72_projects\\java-api\\src\\cn\\hxzy\\apimod\\day08\\files\\erro-out.log";


		  //构建字节输入流
		  FileInputStream fileInputStream = null;

		  //构建字节输出流
		  FileOutputStream fileOutputStream = null;
		  try {
			  fileInputStream = new FileInputStream(path);

			  fileOutputStream = new FileOutputStream(path1);

			  //操作
			  byte[] btns = new byte[2];
			  //读取2个字节-》btns
			  int count = 0;
			  //这种问题如何解决?
			  while ((count = fileInputStream.read(btns)) != -1) {
				  //将读取的文件数据写出到其他文件
				  //fileOutputStream.write(btns, count);
				  fileOutputStream.write(btns, 0, count);

				  //控制台打印
				  /*String result = new String(btns, "UTF-8");
				  System.out.println(result);*/
			  }

		  } catch (Exception e) {
			  e.printStackTrace();
		  } finally {
			  //先关输入还是先关输出?  --- 先关输入
			  //关闭
			  if(fileInputStream != null) {
				  try {
					  fileInputStream.close();
				  } catch (IOException e) {
					  e.printStackTrace();
				  } finally {
					  fileInputStream = null;
				  }
			  }

			  if(fileOutputStream != null) {
				  try {
					  fileOutputStream.close();
				  } catch (IOException e) {
					  e.printStackTrace();
				  } finally {
					  fileOutputStream = null;
				  }
			  }
		  }

练习:通过字节输入和输出流实现将视频文件进行复制。

五、装饰器

        由于InputStream&OutputStream没有缓冲区,导致java程序需要直接与磁盘进行IO操作,

        增加了BufferedInputStream&BufferedOutputStream

1、BufferedInputStream

构造方法:

        BufferedInputStream(InputStream in)

        BufferedInputStream(InputStream in, int size)

主要方法:

        synchronized void flush()

2、BufferedOutputStream

构造方法:

        BufferedOutputStream(OutputStream out)

        BufferedOutputStream(OutputStream out, int size)

3、BufferedReader

        String readLine() //读取一行

4、BufferedWriter

        在字符的装饰类上扩展了标记功能

        //用于标记当前文件中的操作位置

        void mark(int readAheadLimit)

        //将文件操作指针重置到mark标记位

        void reset()

案例代码:

String path = "E:\\java72_projects\\java-api\\src\\cn\\day08\\files\\main.txt";

//从文件中读取字符  file read
FileReader fileReader = new FileReader(path);
BufferedReader bufferedReader = new BufferedReader(fileReader);

//char cha = (char)bufferedReader.read();

System.out.println((char)bufferedReader.read());
bufferedReader.mark(10);
System.out.println((char)bufferedReader.read());
System.out.println((char)bufferedReader.read());
System.out.println((char)bufferedReader.read());
bufferedReader.reset();
System.out.println((char)bufferedReader.read());
System.out.println((char)bufferedReader.read());
System.out.println((char)bufferedReader.read());

        //执行结果: a,b,c,d,b,c,d

六、系统流

        System.err 标准错误输出流

        System.out 标准输出流

        System.in 标准输入流

        Scanner 扫描器

案例:

Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        System.out.println(str);
		
		
	利用装饰器配合系统标准输入流实现扫描器功能:
		BufferedInputStream bufferedInputStream = new BufferedInputStream(System.in);

        System.out.println("请输入内容:");
        byte[] bt = new byte[255];
        int read = bufferedInputStream.read(bt, 0, bt.length);
        String str = new String(bt, 0, read, "utf-8");

        System.out.println("您接收的内容是:"+str);

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

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

相关文章

基于Python的校园爱心帮扶管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

pycharm小游戏贪吃蛇及pygame模块学习()

由于代码量大,会逐渐发布 一.pycharm学习 在PyCharm中使用Pygame插入音乐和图片时,有以下这些注意事项: 插入音乐: - 文件格式支持:Pygame常用的音乐格式如MP3、OGG等,但MP3可能需额外安装库&#xf…

A018基于Spring Boot的民宿租赁系统

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

​基于学习的地铁客流动态预测智能调度方法

1 文章信息 文章题为“A Learning Based Intelligent Train RegulationMethod With Dynamic Prediction forthe Metro Passenger Flow”,该文于2023年发表至“IEEE TRANSACTIONS ON INTELLIGENT TRANSPORTATION SYSTEMS”。文章的核心观点是提出了一种基于学习的智…

SpringBoot+FileBeat+ELK8.x版本收集日志

一、准备环境 1、ElasticSearch:8.1.0 2、FileBeat:8.1.0 3、Kibana:8.1.0 4、logstach:8.1.0 本次统一版本:8.1.0,4个组件,划分目录,保持版本一致。 说明:elasticsearch和kib…

【大数据学习 | HBASE】habse的表结构

在使用的时候hbase就是一个普通的表,但是hbase是一个列式存储的表结构,与我们常用的mysql等关系型数据库的存储方式不同,mysql中的所有列的数据是按照行级别进行存储的,查询数据要整个一行查询出来,不想要的字段也需要…

论文速读:动态再训练-更新用于无源目标检测的Mean Teacher(ECCV2024)

原文标题:Dynamic Retraining-Updating Mean Teacher for Source-Free Object Detection 中文标题:动态再训练-更新用于无源目标检测的Mean Teacher 本篇文章为论文速读,以帮助大家快速了解大意,具体详解可以看这篇分享。ECCV2024…

科研绘图系列:R语言带有面积区域的折线图(linechart)

文章目录 介绍加载R包数据画图准备图1图2图3图4图5图6图7图8图9图10合并所有图形系统信息介绍 带有面积区域的折线图通常被称为面积图(Area Chart)。面积图结合了折线图和条形图的特点,通过在折线下方的区域填充颜色或纹理,来展示一个或多个组的数值如何随第二个变量(通常…

Golang--文件操作

1、文件 文件:文件用于保存数据,是数据源的一种 os包下的File结构体封装了对文件的操作(记得包os包) 2、File结构体--打开文件和关闭文件 2.1 打开文件 打开文件,用于读取(函数): 传…

Ubuntu学习笔记 - Day3

文章目录 学习目标:学习内容:学习笔记:vim简介vim键盘图工作模式 vim移动光标操作上下左右移动翻页 vim替换和删除操作替换删除 vim插入模式详解进入模式搜索 vim底行模式操作保存退出行号 学习目标: 一周掌握 Linux基本使用技巧 …

Java中的JDBC的详解

数据库驱动包 Java提出的一套关于数据库操作的接口 各个数据库厂商要把自己的api对接到/适配到jdbc上 程序员只需要掌握一套api就可以操作不同的数据库了 数据库厂商提供的这个原生api适配到jdbc转换程序,称为“数据库驱动包” 1)创建数据源 //1,创…

Apache-Hive数据库使用学习

前期准备 Hadoop-分布式部署(服务全部在线) Mysql-node1节点部署(确认安装正常) apache-hive -node1节点部署(需要与MySQL元数据联动存储) 参考博客: Hadoop Hadoop集群搭建-完全分布式_hadoop完…

【极客兔兔-Web框架Gee详解】Day2 上下文Context

文章目录 一、框架结构二、设计上下文(Context):day2-context/gee/context.go1. 设计Context必要性1.1 接口粒度过细:1.2 缺乏扩展性:2. 代码3. 优势三、路由(Router): day2-context/gee/router.go四、框架入口:day2-context/gee/gee.go1. 代码五、框架使用: day2-context/m…

LeetCode17. 电话号码的字母组合(2024秋季每日一题 59)

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits “23” 输出:[“…

DApp开发定制:合约设计与源码搭建支持快速上线

随着区块链技术的飞速发展,去中心化应用(DApp)已经成为区块链生态中不可或缺的一部分。DApp不仅改变了传统互联网应用的运作方式,还通过去中心化的理念和智能合约的支持,赋能了用户和开发者。无论是金融、游戏、社交、…

【C++】手动实现C++ vector容器:深入理解动态数组的工作原理

💯个人主页: 起名字真南 💯个人专栏:【数据结构初阶】 【C语言】 【C】 【OJ题解】 目录 1. 引言2. 实现思路3. vector 容器的代码实现4. 代码详解4.1 构造与析构函数4.2 容量管理4.3 迭代器与访问操作4.4 增删操作 5.测试代码6. 时间和空间复杂度分析7.…

深入探讨钉钉与金蝶云星空的数据集成技术

钉钉报销数据集成到金蝶云星空的技术案例分享 在企业日常运营中,行政报销流程的高效管理至关重要。为了实现这一目标,我们采用了轻易云数据集成平台,将钉钉的行政报销数据无缝对接到金蝶云星空的付款单系统。本次案例将重点介绍如何通过API接…

Appium环境搭建/使用教程(图文超详细)

一,环境依赖JDK和Android SDK搭建 (1) JDK: 下载安装(推荐java8版本,其他版本不兼容,会导致appiumServer启动不了) 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html根据自己的系…

大数据-209 数据挖掘 机器学习理论 - 梯度下降 梯度下降算法调优

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

模拟实现strcat函数

1.strcat的作用 char * strcat ( char * destination, const char * source ); 作用:将源字符串的附加到目标字符串中。目标字符串中的终止空字符将被源字符串的第一个字符替换,并且在将两个字符串连接形成的新字符串的末尾将包含一个空字符。 destina…