从零开始学java(28)--- IO

从零开始学java之IO流 使用字节流将多个相同格式的文本、视频、音乐写到一个文件中 如果我们有多个相同格式的文件,比如1.mp3,2.mp3,3.mp3,4.mp3,5.mp3,我们想要通过IO流将他们连起来形成一个12345.mp3,这个12345.mp3 会连续播放1.mp3,2.mp3,3.mp3,4.mp3,5.mp3里面的音乐。    首先考虑的就是使用字节流,因为纯文本文件使用字符流还比较好用,其余的不是纯文本的文件都是使用字节流,因为硬盘上的所有文件都是以字节的形 阅读详情

Day18

今天主要学习java中的IO体系。对其中5个类File、OutputStream、InputStream、Writer、Reader有初步了解。
常识:标准输入设备是键盘,标准输出设备是显示器。

Java IO中常用的类

在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了
在这里插入图片描述 1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。
4.Reader(文件格式操作):抽象类,基于字符的输入操作。
5. Writer(文件格式操作):抽象类,基于字符的输出操作。
6. RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。
在这里插入图片描述
java I/O主要包括如下几个层次,包含三个部分:

1.流式部分――IO的主体部分;

2.非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;

3.其他类–文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。

1.File:

表示文件或目录(文件夹),提供的方法,可以文件进行:创建,删除,获取信息,得到子目录中的文件,判断文件所在路径等;注意不能操作文件的内容。

一些常用的API:
boolean createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

boolean delete()删除此抽象路径名表示的文件或目录。//注意:这个删除,不走回收站,直接删除,所以要小心使用。

boolean exists()测试此抽象路径名表示的文件或目录是否存在。

File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。

String getAbsolutePath()返回此抽象路径名的绝对路径名字符串。

String getName()返回由此抽象路径名表示的文件或目录的名称。

String getParent()返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。

File getParentFile()返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。

String getPath()将此抽象路径名转换为一个路径名字符串。

boolean isDirectory()测试此抽象路径名表示的文件是否是一个目录。

boolean isFile()测试此抽象路径名表示的文件是否是一个标准文件。

long length()返回由此抽象路径名表示的文件的长度。字节数

String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。//遍历目录返回的只有名字

File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。//返回路径全名 推荐

File[] listFiles(FileFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

File[] listFiles(FilenameFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

static File[] listRoots()列出可用的文件系统根。

boolean mkdir()创建此抽象路径名指定的目录。调用该方法时,File对象必须对应一个路径,而不是文件 //只能创建一个目录

boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 //即可创建一个目录,也可创建多及目录,推荐

2.流式部分

1.流的概念和作用

流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象。
流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

流的作用:为数据源和目的地建立一个输送通道。

Java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。

2.IO流的分类:

1.根据操作的数据类型的不同可以分为 :字节流与字符流。

流序列中的数据既可以是未经加工的原始二进制数据,也可以是经一定编码处理后符合某种格式规定的特定数据。

字节流:数据流中最小的数据单元是字节
InputStream(FileInputStream),OutputStrram(FileInputStream)

字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。
Reader(BufferedReader),Writer(BufferedWriter)

2.根据数据的流向分为:输入流与输出流,程序(内存)作为参照物,程序从外部读取称为输入(Input),程序向外部写数据成为输出(Output)。

采用数据流的目的就是使得输出输入独立于设备。
输入流( Input Stream )不关心数据源来自何种设备(键盘,文件,网络)。
输出流( Output Stream )不关心数据的目的是何种设备(键盘,文件,网络)。

特点: 相对于程序来说,输出流是往存储介质或数据通道写入数据,而输入流是从存储介质或数据通道中读取数据,一般来说关于流的特性有下面几点:

1.先进先出,最先写入输出流的数据最先被输入流读取到。

2.顺序存取,可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。(RandomAccessFile可以从文件的任意位置进行存取(输入输出)操作)

3.只读或只写,每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。

3.Java IO流对象
1.输入字节流InputStream

1.InputStream是所有的输入字节流的父类,它是一个抽象类。

2.ByteArrayInputStream、StringBufferInputStream(StreamBufferInputStream)、FileInputStream是三种基本的介质流,它们分别从Byte数组、StringBuffer、和本地文件中读取数据。

3.PipedInputStream是从与其它线程共用的管道中读取数据.

4.ObjectInputStream和所有FilterInputStream的子类都是装饰流(装饰器模式的主角)。

InputStream中的三个基本的读方法:

1.abstract int read() :读取一个字节数据,并返回读到的数据,如果返回-1,表示读到了输入流的末尾。

2.int read(byte[] b) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。

3.int read(byte[] b, int off, int len) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。

流结束的判断:方法read()的返回值为-1时。
void close() :关闭输入流,释放和这个流相关的系统资源。

2.输出字节流OutputStream

1.OutputStream是所有的输出字节流的父类,它是一个抽象类。

2.ByteArrayOutputStream、FileOutputStream是两种基本的介质流,它们分别向Byte数组、和本地文件中写入数据。PipedOutputStream是向与其它线程共用的管道中写入数据。

3.ObjectOutputStream和所有FilterOutputStream的子类都是装饰流。

outputStream中的三个基本的写入方法:
1.abstract void write(int b):往输出流中写入一个字节。

2.void write(byte[] b) :往输出流中写入数组b中的所有字节。
3.void write(byte[] b, int off, int len) :往输出流中写入数组b中从偏移量off开始的len个字节的数据。

void flush() :刷新输出流,强制缓冲区中的输出字节被写出。
void close() :关闭输出流,释放和这个流相关的系统资源。

3.字符输入流Reader

1.Reader是所有的输入字符流的父类,它是一个抽象类。

2.CharReader、StringReader是两种基本的介质流,它们分别将Char数组、String中读取数据。PipedReader是从与其它线程共用的管道中读取数据。

3.BufferedReader是一个装饰器,它和其子类负责装饰其它Reader对象。

4.FilterReader是所有自定义具体装饰流的父类,其子类PushbackReader对Reader对象进行装饰,会增加一个行号。

5.InputStreamReader是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将FileInputStream转变为Reader的方法。Reader中各个类的用途和使用方法基本和InputStream中的类使用一致。

主要方法:
1.public int read();:读取一个字符,返回值为读取的字符

2.public int read(char cbuf[ ]);:读取一系列字符到数组cbuf[ ]中,返回值为实际读取的字符的数量。

3.public abstract int read(char cbuf[ ],int off,int len) ;:读取len个字符,从数组cbuf[ ]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现。

流结束的判断:方法readLine()的返回值为null时。

4.字符输出流Writer

1.Writer是所有的输出字符流的父类,它是一个抽象类。

2.CharArrayWriter、StringWriter是两种基本的介质流,它们分别向Char数组、String中写入数据。PipedWriter是向与其它线程共用的管道中写入数据,

3.BufferedWriter是一个装饰器为Writer提供缓冲功能。

4.PrintWriter和PrintStream极其类似,功能和使用也非常相似。

5.OutputStreamWriter是OutputStream到Writer转换的桥梁,它的子类FileWriter其实就是一个实现此功能的具体类。功能和使用和OutputStream极其类似。

主要方法:

1.public void write(int c) ; :将整型值c的低16位写入输出流
2.public void write(char cbuf[]) ; :将字符数组cbuf[]写入输出流
3.public abstract void write(char cbuf[],int off,int len) ; :将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流
4.public void write(String str) ;:将字符串str中的字符写入输出流
5.public void write(String str,int off,int len);:将字符串str 中从索引off开始处的len个字符写入输出流

4.字节流和字符流的区别

字节流和字符流的区别:
输出方式不同:字节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。

读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

所以,只要是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。

以上部分参考自深入理解Java中的IO,想要了解更多的朋友可以参考。

Oracle EBS财务模块(三)总账功能 (一)总账管理系统主要功能  总账管理系统(Oraclegeneralledger)是一个公司一切账务系统的核心,它好比是公司会计信息的中央处理器。总账管理系统提供了一个完整的财务管理核算及分析流程。它是所有子账户的信息存储器,因此反映了所有子账户的财务和现金活动。总账管理系统的主要作用是记录公司的财务活动,并生成财务报表和管理报表,以帮助公司内外人士进行决策。一个公司或组织的制造系统、项目管理系 阅读详情

相关推荐

机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾

f作者: 寒小阳 &&龙心尘 时间:2015年10月。 出处: 声明:版权所有,转载请注明出处,谢谢。手把手机器学习之逻辑回归应用——Kaggle泰坦尼克之灾1.引言先说一句,年末双十一什么的一来,真是非(mang)常(cheng)欢(gou)乐(le)!然后push自己抽出时间来写这篇blog的原因也非常简单: 写完前两篇逻辑回归的介绍和各个角度理解之后,小伙伴们纷纷表示『好像很高级的样纸,

寒小阳 43万+

124-OutputStreamWriter介绍(以writer结尾是字符流父类是writer)

java.io.OutputStreamWriter extends Writer OutputStreamWriter:是字符通向字节流的桥梁,可以使用指定的charset(编码表)将要写入流中的字符编码成字节(编码能看懂的变成看不懂的) 继承自父类的成员方法 void writer(int c) void writer(char[] cbuf) abstract void writer(char[] cbuf,int off ,int len) void writer(String str) void.

shwjakak的博客 430

不经意传输(OT)协议 - Mike Rosulek教授课堂笔记

OT扩展协议-IKNP

qq_43569221的博客 1850

字节流和字符流的区别

1、以stream结尾都是字节流,reader和writer结尾都是字符流。InputStream是所有字节输入流的父类,OutputStream是所有字节输出流的父类;Reader是字符输入流的父类,Writer是字符输出流的父类。 2、字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字 节,操作字节和字节数组。 3、字节流可以处...

风清若影 683

Unity中URP下的菲涅尔效果实现(个性化修改)

在上篇文章中,我们实现了 URP 下的菲涅尔基础效果,我们在这篇文章中,对其进行自定义化修改。

楠溪泽岸的博客 2063

告别瞎猜!用通达信/同花顺这些资金流向函数,一眼看穿主力动向(附实战公式)

本文详细解析了通达信/同花顺资金流向函数的实战应用,帮助投资者精准识别主力动向。通过12个核心资金函数的组合逻辑,构建主力行为监控体系,避免未来函数陷阱,识别主力对倒行为,并提前捕捉异动。适合股票投资者提升自选股分析能力。

weixin_42522964的博客 1216

Java IO 详解 之 字节流抽象父类

InputStream 是字节输入流的抽象父类,InputStream 的所有实现类所操作的数据单位都是字节,即:一个或多个 的读取字节。 - OutputStream 是字节输入流的抽象父类,OutputStream 的所有实现类所操作的数据单位都是字节,即:一个或多个 的写入字节。 ............

十七的博客 1134

利用插件扩展 Qt 应用程序

不仅 Qt 本身可以通过插件进行扩展,而且 Qt 应用程序也可以通过插件来扩展,这需要应用程序使用 `QPluginLoader` 检测和加载插件。

青春不老,奋斗不止! 1万+

Java中的字节输入出流和字符输入输出流

Java中的字节输入出流和字符输入输出流下面哪个流类属于面向字符的输入流( )A BufferedWriter B FileInputStream C ObjectInputStream D InputStreamReader解析:IO流(1)字节输入流        基类:InputStream        FileInputStream、ByteArrayInputStream、PipedI

游海东的技术专栏 1万+

OpenClaw实战系列10(完结篇):企业级应用实战案例——从0到1搭建智能客服系统

本文以一家跨境电商公司为例,从需求分析、系统设计、分步搭建到上线运营,完整呈现智能客服系统的落地全过程。所有配置命令和截图均来自实测环境,你可以直接复制使用。

PeterPan的博客 1306

大模型LoRA微调调参的实战技巧(持续更新)

本文主要介绍了大模型LoRA微调调参的实战技巧,希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 实战技巧

herosunly的博客 20万+

字符输入流 InputStreamReader 的方法 + 字符输出流 OutputStreamWriter 的方法

字符输入流 :InputStreamReader 的方法 + 字符输出流:OutputStreamWriter的方法1、字符输入流 :InputStreamReader 的方法 * int read( )  : 一次读取一个字符 * int read(char[ ] chs)  : 一次读取一个字符数组package cn.itcast_03; import java.io.FileInputS...

风暴计划 5013

[CSP-X2025山东小学组T4]勇者斗恶龙

[CSP-X2025山东小学组T4]勇者斗恶龙,动态规划

少儿编程乔老师 150

【18】JAVASE-IO专题【从零开始学JAVA】

从零开始学Java系列课程

波波烤鸭的博客 1911

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

程序员必备的600个单词【从零开始学JAVA】

从零开始学Java系列课程

波波烤鸭的博客 1034

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[从零开始学习JAVA] IO流

在前文我们知道,如果我们想要实现对于程序的存档功能,就一共需要实现两个功能:1.将数据存到文件当中,这也就是我们上一篇文章File类的作用2.实现程序对文件数据的读取功能,这也就是我们接下来几篇所介绍的IO流的作用在Java中,IO流(Input/Output Stream)是用于处理输入和输出的机制。它提供了读写数据的方式,允许程序与文件、网络等交互。Java中的IO流分为字节流和字符流两种类型。字节流操作以字节为单位进行输入和输出。

2301_80615512的博客 1109

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

从零开始学Java系列汇总

因为优快云没有分类归纳博客的功能,所以特写本帖汇总《从零开始学Java系列》,方便大家查阅!希望各位小伙伴从本系列中可以从我的拙作中能对Java的高频面试题有所掌握,也希望各位可以多给与指教!

一一哥 1255

【从零开始学Java笔记】目录

大家可以关注作者的账号,关注从零开始学Java笔记文集。也可以根据目录前往作者的博客园博客进行学习。本片文件将基于黑马程序员就业班视频进行学习以及资料的分享,并记录笔记和自己的看法。欢迎大家一起学习和讨论。 附上链接:Java黑马就业班IDEA版_基础部分https://www.bilibili.com/video/av79349191 以下文集目录 1.导读 【从零开始学Java笔记】为什么选择Java(学习资料分享:java四大名著+视频) 2.Java基础 【从零开始学Java笔记】Java...

cnmeimei的博客 146

从零开始学Java之IO字符流懒人模式(自动生成属性类,方法类,界面类)

平时做一个项目都要建很多的属性类,方法类和View类,学了IO流之后想了一种办法,就是自己写一串代码,然后在文本文档里写class 加上所有的属性,然后运行一下代码就自动生成了一个  .java   文件。用myeclipse打开就可以了。同样的道理,你写一个只有   class 的txt文本文档  点一下另一段代码就自动生成了一个方法类,里面带有增删改查四个简单方法的方法类,还有一个Vie

j_a_v_a_guan的博客 1380

从零开始学Netty(一)常见的IO模型

什么是Netty? Netty是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。 (Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers &am...

晓晨的博客 700

【新手向】从零开始学习Java(Day14)流、文件和IO

一起从零开始成就Java大神

黎明前的黑暗最为深邃,但只要你坚持,曙光终会划破天际。 1240

Java学习路线图(如何快速学Java)

  不知不觉从初学Java到现在已经8年了,今天在这里给刚入门和入门不久的小伙伴们一些建议。可能总结的不是很详细,但给出了一个大概的学习路线。希望对大家有帮助哈~ 如何快速学Java 这里我以Java EE(Jakarta EE)/Java Web的经验来说哦。(都把你们看做是零基础入门的了) 学习Java EE(Jakarta EE)总体来说会有以下三大模块: Ja...

weixin_33962621的博客 9568

【从零开始学习JAVA | 三十四篇】IO流

IO流是一个知识点很多的章节,因此我们关于IO流的介绍会分为多篇来进行详解,而掌握好IO流可以大大提高我们的效率,简化我们的代码执行效率。

fckbb的博客 4980

从零开始学Java-07 IO/NIO

IO NIO

leiyuee的博客 160

java从零开始 day22(io流)

Java IO 也称为IO流,IO = 流,它的核心就是对文件的操作,对于 字节 、字符类型的输入和输出流。 IO是指对数据流的输入和输出,也称为IO流,IO流主要分为两大类,字节流和字符流。字节流可以处理任何类型的数据,如图片,视频等,字符流只能处理字符类型的数据。 IO流的本质是数据传输,并且流是单向的。 常用的字节流FileInputStream、FileOutputStream、ObjectInputStream、ObjectOutputStream。 IO分阻塞型IO和非阻塞型IO(NIO)阻.

m0_62499535的博客 129

[从零开始学Java] Serializable

一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。Serializable是java.io包中定义的、用于实现Java类的序列化操作而提供的一个语义级别的接口。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象。

2301_80615512的博客 1082
上一篇: 从零开始学java(27)--- 异常
下一篇: 从零开始学java(29) --- JavaFX
Muyaaa
博客等级 码龄9年 18粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值