Java中的I/O讲解(超容易理解)(上篇)

news2025/1/18 10:26:57

如果想观看更多Java内容 可上我的个人主页关注我,地址子逸爱编程-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/a15766649633?spm=1000.2115.3001.5343使用工具 IntelliJ IDEA Community Edition 2023.1.4

使用语言 Java8 

代码能力快速提升小方法,看完代码自己敲一遍,十分有用 

目录

1.File类

1.1 File简述

1.2 使用File操作文件和目录 

1.2.1 创建File对象

1.3 File类的常用方法

1.4 使用方法贯穿示例

1.4.1 示例代码 

1.5 打印盘中首目录的所有文件名方法

2.I(Input)/O(output)流概述

2.1 I/O流的概念与作用

2.2 流的分类 

2.2.1 按流向划分:输入流和输出流 

2.2.2 按处理单元划分:字节流和字符流 

2.2.3 按流的角色划分:节点流和处理流


1.File类

1.1 File简述

在程序运行的过程中,输入/输出是常用的操作,也是必需的部分。允许程序读取外部数据,包括来自磁盘,光盘,文件等存储设备的数据,这类操作属于输入数据;同时允许程序记录运行状态,将程序数据输出到磁盘、光盘、文件等存储设备中,这类操作属于输出数据,数据的输入和输出离不开文件,经常使用到的文件类型有很多,如扩展名为.txt、.doc、.bmp、.class的文件等。 

File类是java.io包下代表操作与平台无关的文件和目录的类,也就是说,如果需要在程序中操作文件或目录,就可以通过File类实现对文件或目录的新建、删除、重命名等操作。

1.2 使用File操作文件和目录 

1.2.1 创建File对象

在程序中,一个File对象可以代表一个文件或目录。它可以查出与文件相关的信息,如名称、修改日期、文件大小等。File类的构造方法定义如下: 

public File(String pathName)

其中,pathName指文件路径。因此,在创建File对象的时候必须设置文件路径。 

例如,操作C盘下的test.txt文件,创建File对象的语句如下:

File file=new File("C:\\test.txt");

提示:
在Windows操作系统中,文件路径名中的路径分隔符可以使用正斜杠"/",如C:/test.txt;也可以使用反斜杠"\",但必须写成"\\",其中第一个"\"表示转义符,如"C:\\test.txt"。
pathNmae可以是相对路径也可以是绝对路径。绝对路径是以根目录(Windows系统中的盘符)开头的完整路径。例如:
File file=new File("C:\\test.txt");

在项目中使用相对路径时,需要放在src同级目录才可以点出来,示例如下:

1.3 File类的常用方法

boolean createNewFile()
    创建新文件
boolean delete()
    删除文件
boolean exists()
    判断文件是否存在
    存在就为true,不存在就为false
Boolean isFile()
    判断是否是文件
    是的话就是true不是就是false
boolean isDirectory()
    判断是否是目录(文件夹)
    是的话就是true不是就是false
long length()
    返回文件长度,单位为字节;若文件不存在,则返回OL
String getPath()
    返回文件名相应的路径
String getAbsolutePath()
    返回此对象表示的文件绝对路径 

这里只列举了File类的一些常用方法,在实际开发中,如需完成对File类的更多操作,则可随时查阅API帮助文档。 

1.4 使用方法贯穿示例

在方法中使用IO流时,可能会发生编译异常(检查异常:FileNotFoundException或IOException),这时需要进行异常处理才能进行编译;

1.4.1 示例代码 

在以上代码中,为保证程序的严谨性,避免错误发生,在创建新文件或删除文件之前,都会使用if语句进行判断,以避免重复创建文件或删除不存在的文件 。 

1.5 打印盘中首目录的所有文件名方法

listFIles()方法代表的就是文件集合;

2.I(Input)/O(output)流概述

2.1 I/O流的概念与作用

File类能够实现对文件和目录的创建、删除等基础性操作,但是无法实现对文件内容的操作,也就是无法实现对文件的读写。而java中的I/O流能够方便地实现数据的输入和输出,是实现文件读写的基础。 

如何解释I/O呢?
I即input,指读入操作,O即output,指写出操作。

 流:指一连串流动的字符,是以先进先出的方式发送和接收数据的通道。既然是流,必然有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘、文件等,甚至可以是Internet上的某个统一资源定位符。所谓I/O流就是实现数据输入和输出的流,在I/O流的基础上,可以实现对文件的读写操作。那么,文件的读写指什么?

读文件,是指把文件中的数据读取到内存中,反之,写文件就是把内存中的数据写到文件中。
java中所有流类型都封装到java.io包中,用以实现I/O操作。下面从不同的角度对流进行分类,它们在概念上会有重叠的地方。

2.2 流的分类 

2.2.1 按流向划分:输入流和输出流 

流具有明确的方向性,按照流的流向来分,可以分为输入流和输出流 :

输入流

  • 只能从中读取数据,而不能写入数据的流,实现程序从数据源中读数据,数据源指文件、磁盘能够存储数据的媒介
  • 程序从数据源中读数据

输出流

  • 只能向其写入数据,而不能从中读数据的流,实现程序向目标数据源中写数据
  • 程序去写目标数据源

Java的输入流主要以InputStream和Reader作为基类(父类),而输出流则主要以OutputStream和Writer作为基类(父类)。它们都是一些抽象类,无法直接实例化对象。

按照流的流向进行分类时,输入流完成数据读入操作,输出流完成数据写出操作,这里的"出"和"入"一定是从程序运行所在内存的角度来论述的。如果从文件或磁盘的角度来论述,方向恰恰相反,混淆了概念就会引发错误。

2.2.2 按处理单元划分:字节流和字符流 

按照处理单元划分,Java中的流可分为字节流和字符流,它们的区别在于操作的数据单元不同。

字节流

  • 以8位字节位为操作数据单元的流,可用于操作二进制数据(如操作图片文件)
  • 字节流是一个一个字节读取的

字符流

  • 以16位的字符作为操作数据单元的流,可用于操作文本数据
  • 字符流是几个几个读取的 

字节流和字符流的用法几乎相同。它们向下细分,还可以划分字节输入流、字节输出流、字符输入流、字符输出流。 

通俗地理解,可以把I/O流看作一个水管,这个水管中依次排列着许多水滴,每滴水滴就是一个处理单元,即一个字节或字符。在字节流中每滴水滴是一个字节,在字符流中每滴水滴时一个字符。

2.2.3 按流的角色划分:节点流和处理流

按流的角色划分,Java中的流可分为节点流和处理流:

节点流
    可以直接向一个特定的存储介质(如磁盘、文件)读写数据的流。当使用节点流进行读写数据操作时,程序直接连接到数据源。
处理流

  • 用于对一个已存在的流进行连接和封装,是通过封装后的流实现读写操作的流。
  • 程序连接数据源是先封装再连接数据源 

处理流就是封装了节点流;

从以上的介绍可以看出,当使用处理流进行读写操作时,程序并不会直接连接到实际的数据源。使用处理流包装节点流,程序通过处理流执行输入和输出功能,让节点流与文件或磁盘等存储介质交互。它可以隐藏底层节点流的差异,并且对外提供更加方便的输入和输出的方法,因此节点流也被称为包装流,它的优势如下:

  • 对开发人员来说,使用处理流进行I/O操作更简单。
  • 使用处理流的执行效率高。 

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

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

相关文章

智慧乡村赋能发展:数字乡村推动农村经济社会持续繁荣

目录 一、智慧乡村的内涵与发展意义 二、智慧乡村赋能发展的路径 1、加强信息基础设施建设 2、推进农业生产智能化 3、提升乡村治理现代化水平 4、推动农村产业融合发展 三、智慧乡村发展面临的挑战与对策 四、智慧乡村发展的未来展望 1、技术融合创新将更加深入 2、…

百度智能云+SpringBoot=AI对话【人工智能】

百度智能云SpringBootAI对话【人工智能】 前言版权推荐百度智能云SpringBootAI对话【人工智能】效果演示登录AI对话 项目结构后端开发pom和propertiessql_table和entitydao和mapperservice和implconfig和utilLoginController和ChatController 前端开发css和jslogin.html和chat.…

怎么在Linux系统下Docker部署Excalidraw白板工具并实现无公网IP远程访问?

文章目录 1. 安装Docker2. 使用Docker拉取Excalidraw镜像3. 创建并启动Excalidraw容器4. 本地连接测试5. 公网远程访问本地Excalidraw5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Ubuntu系统使用Docker部署开源白板工具Excal…

【Linux】实现进度条小程序

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 前言2. 回车和换行3. 缓冲区4. 进度条4.1 倒计时设置4.2 进度条4.2.1 实现简单进度条4.2.2 进度条完善 5. 附进度条代码5.1 Processbar.h5.2 Processbar.c5.3 Main.c5.4 Makefile 1. 前言 在之前已经了解了 【Lin…

C++ list详解及模拟实现

目录 本节目标 1. list的介绍及使用 1.2 list的使用 2.list的模拟实现 1.对list进行初步的实现 2.头插和任意位置的插入 3.pos节点的删除,头删,尾删 4.销毁list和析构函数 5.const迭代器 6.拷贝构造和赋值操作 3.完整代码 本节目标 1. list的…

怎么做扫码签到活动_一场别开生面的活动签到革新之旅

在数字化飞速发展的今天,传统的签到方式已无法满足人们对高效、便捷、互动性的追求。为此,我们创新性地推出了扫码签到活动,为您带来一场前所未有的智慧互动新体验。 工具/原料 微信小程序 飞多多网站 方法/步骤 一、扫码签到&#xff0c…

【目标跟踪】奇葩需求如何处理(二)

文章目录 一、前言二、奇葩需求2.1、井盖2.2、管线 三、后记 一、前言 在工作中往往出现些奇葩需求。上一篇介绍了一些奇葩需求奇葩需求如何处理(一) ,今天给大家分享一些更奇葩的需求。 二、奇葩需求 2.1、井盖 昨天突然接到一个需求&…

JAVA_会话

会话技术 1.会话: 一次会话包含多次请求和响应 2.功能: 在一次会话的范围内的多次请求,共享数据 3.方式: 3.1.客户端会话技术 Cookie(甜点) 1.概念: 客户端会话技术,将数据保存到客户端 2.快速入门: 1.创建Cookie对象,绑定数据new Cookie(String name,String v…

msvcp140.dll是什么文件?msvcp140.dll丢失如何解决(最新教程)

在玩电脑的时候,经常会碰到一些烦人的东西,比如那个“msvcp140.dll丢失”啥啥啥的。这个东西一出现,整个人都不好了,完全影响了我们愉快电脑生活的节奏。为啥会出现msvcp140.dll丢失的这种情况,怎么解决,还…

精读《架构设计之 DCI》

本期精读文章是:The DCI Architecture 1 引言 随着前端 ES6 ES7 的一路前行, 我们大前端借鉴和引进了各种其他编程语言中的概念、特性、模式; 我们可以使用函数式 Functional 编程设计,可以使用面向对象 OOP 的设计,可以使用面向…

【C++从练气到飞升】04---拷贝构造函数

🎈个人主页:库库的里昂 ✨收录专栏:C从练气到飞升 🎉鸟欲高飞先振翅,人求上进先读书。 目录 ⛳️推荐 一、拷贝构造函数的引入 1. 以日期类为例:进行的值拷贝是不会发生错误的 2. 以栈类为例:进行的值拷贝会发现发…

C语言基础(十六)通过指针来输入和获取结构体的变量值

老样子&#xff0c;先看代码 #include <stdio.h> #include <string.h>#define NLEN 30 struct namect{char fname[NLEN];char lname[NLEN];int letters; };void getinfo(struct namect *); void makeinfo(struct namect *ptr); void showinfo(const struct namec…

Kubernetes的Namespace使用

在 Kubernetes 中&#xff0c;命名空间提供了一种用于隔离单个集群中的资源组的机制。资源名称在命名空间内必须是唯一的&#xff0c;但不能跨命名空间。基于命名空间的作用域仅适用于命名空间物体 &#xff08;例如部署、服务等&#xff09;而不是集群范围的对象&#xff08;例…

牛客周赛 Round 37VP(DEF)

D.思维题&#xff1a; 若按照顺序发现很难入手&#xff0c;于是我们不妨先小紫&#xff0c;再让小红反悔即可 假设为cabababbabazbc&#xff0c;如果直接小紫&#xff0c;那么它一定以a开头&#xff0c;于是小红可以先把首尾的a去掉&#xff0c;即czbc,此时可以得到bc,于是小红…

19---时钟电路设计

视频链接 时钟硬件电路设计01_哔哩哔哩_bilibili 时钟电路设计 晶振是数字电路的心脏&#xff0c;数字电路需要一个稳定的工作时钟信号&#xff0c;时钟电路至关重要&#xff01; 1、晶振概述 晶振一般指晶体振荡器。晶体振荡器是指从一块石英晶体上按一定方位角切下薄片&…

基于stable diffusion的IP海报生成

【AIGC】只要10秒&#xff0c;AI生成IP海报&#xff0c;解放双手&#xff01;&#xff01;&#xff01;在AIGC市场发展的趋势下&#xff0c;如何帮助设计工作者解放双手。本文将从图像生成方向切入&#xff0c;帮助大家体系化的学习Stable diffusion的使用&#xff0c;完成自有…

sonar接入maven项目

1、介绍 sonar是一款静态代码质量分析工具&#xff0c;支持Java、Python、PHP、JavaScript、CSS等25种以上的语言&#xff0c;而且能够集成在IDE、Jenkins、Git等服务中&#xff0c;方便随时查看代码质量分析报告。他有如下特性 (1) 检查代码是否遵循编程标准&#xff1a;如命…

【回归预测】基于DBO-BP(蜣螂优化算法优化BP神经网络)的回归预测 多输入单输出【Matlab代码#68】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. BP神经网络2. 蜣螂优化算法3. DBO-BP神经网络模型的构建4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. BP神…

[云] vmware: host: net: Net.CoaleseDefaultOn

https://communities.vmware.com/t5/Storage-Performance/Advanced-Networking-Performance-Options/ta-p/2792649 在vsphere client下的路径是&#xff1a; 选择使用的host -> 右键setting->configure-> system->advanced system setting->edit->Net.Coales…

第九节HarmonyOS 常用基础组件31-Toggle

1、描述 组件提供勾选框样式、状态栏样式以及开关样式。 2、子组件 仅当ToggleType为Button时可包含子组件。 3、接口 Toggle(options: { type: ToggleType , isOn?: boolean}) 4、参数 参数名 参数类型 必填 描述 type ToggleType 是 开关的样式。 isOn boole…