Java 输入/输出(IO流)

IO(输入/输出)是比较抽象的,看不到明显的运行效果,但输入和输出是所有程序都必需的部分。【使用输入机制,允许程序读取外部数据(包括来自磁盘、光盘等存储设备的数据、来自网络的数据)、
用户输入数据;使用输出机制,允许程序记录运行状态,将程序数据输出到磁盘、光盘等存储设备中和网络其他设备中。】
Java的IO通过java.io包下的类和接口来支持,在java.io包下主要包括输入流、输出流两种IO流,每种输入、输出流又可分为字节流和字符流两大类。其中字节流以字节为单位来处理输入、输出操作,而字符流则以字符来处理输入、输出操作。除此之外Java的IO流使用了一种装饰器设计模式,它将IO流分成底层节点流和上层处理流,其中节点流用于和底层的物理存储节点直接关联(不同的物理节点获取节点流的方式可能存在一定的差异),但程序可以把不同的物理节点流包装成统一的处理流,从而允许程序使用统一的输入、输出代码来读取不同的物理存储节点的资源。

一、File类
File类代表与平台无关的文件和目录的。File类不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。(不管是文件还是目录都是使用File来操作的,File能新建、删除、重命名文件和目录,但是File不能访问文件内容本身)
Java 支持以/作为平台无关的通用路径分割符
路径相关的常用方法:
(1)、getName()返回由此抽象路径名表示的文件或目录的名称
(2)、getPath() 将此抽象路径名转换为一个路径名字符串
(3)、getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null【根据传入的路径字符串分割】
(4)、getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null
(5)、getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
(7)、getAbsoluteFile() 返回此抽象路径名的绝对路径名形式
检测相关方法:
(1)、exists() 测试此抽象路径名表示的文件或目录是否存在
(2)、canRead() 测试应用程序是否可以读取此抽象路径名表示的文件
(3)、canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件
(4)、cannExecute() 测试应用程序是否执行此抽象路径名表示的文件
(5)、isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件
(6)、isFile() 测试此抽象路径名指定的文件是否是一个标准的文件
(7)、isDirectory() 测试此抽象路径名表示的文件是否是一个目录
(8)、isAbsolute() 测试此抽象路径名是否为绝对路径名【.代表当前目录】
获取文件信息方法:
(1)、length()指文件的大小 / 返回由此抽象路径名表示的文件的长度
操作相关方法:
(1)、createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件
(2)、createTempFile() 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称
(3)、delete() 删除此抽象路径名表示的文件或目录
(4)、deleteOnExit()在虚拟机终止时,请求删除此抽象路径名表示的文件或目录
(5)、renameTo() 重新命名此抽象路径名表示的文件
(6)、mkdir()创建此抽象路径名指定的目录
遍历所有的文件和目录方法:
(1)、list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录【返回所有的目录】
(2)、listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录

二、JavaIO流
Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream),通过流的方式允许Java程序使用相同的方式来访问不同的输入输出源。 stream是从起源(source)到接收(sink)的有序数。Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入输出功能
1、流的分类
(1)、输入流和输出流按照流的流向来分,可以分为输入流和输出流。输入、输出都是从程序运行所在内存的角度来划分的
①、输入流:只能从中读取数据,而不能向其写入数据【由InputStream和Reader作为基类】
②、输出流:只能向其写入数据,而不能从中读取数据【由OutputStream和Writer作为基类】
2、字节流和字符流 字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同
①、字节流操作的数据单元是8位的字节【由InputStream和OutputStream作为基类】
②、字符流操作的数据单元是16位的字符【由 Reader和 Writer作为基类】
模型图:在这里插入图片描述在这里插入图片描述

三、字节流和字符流
字节流和字符流的操作方式几乎完全一样,区别只是操作的数据单元不同而已。字节流操作的数据单元
是字节,字符流操作的数据单元是字符。
InputStream和Reader是所有输入流的抽象基类,它们的方法是所有输入流都可使用的方法。
四、打印流
打印流提供了非常方便的打印功能,可以打印任何的数据类型,例如:小数、整数、字符串等等。打印流只有输出没有输入。是 一种 处理流 【打印流是输出信息做方便的类,主要包含字节打印流(PrintStream)和字符打印流】
格式字符:格式字符用以指定输出项的数据类型和输出格式
d格式:用来输出十进制整数。有以下几种用法:
(1)、%d:按整型数据的实际长度输出
(2)、%s:例如:printf("%s", “CHINA”)输出"CHINA"字符串(不包括双引号)
(3)、%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
五、 访问字符串
访问字符串的两大方法:StringReader()和StringWriter()
StringReader:用来将字符串转换成字符输入流。然后使用字符输入流提供的方式进行操作,也可以提供给其他高级字符输入流来使用。如可以将该字符输入流提供给BufferedReader输入流使用
StringWriter:在内存中缓存读取到的所有字符串,然后使用通过toString方法一次性全部输出字符串
六、RandomAccessFile类
RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法 来访问文件内容,它既可以读取文件内容,也可以向文件输出数据。RandomAccessFile支持“随机访问”的方式,程序可以直接跳转到文件的任意地方来读写数据。
RandomAccessFile几种访问模式:
(1)、r":以只读方式打开指定文件。如果试图对该RandomAccessFile执行写入方法,都将抛出IOException 异常
(2)、“rw”:以读、写方式打开指定文件。如果该文件尚不存在,则尝试创建该文件
RandomAccessFile依然不能向文件的指定位置插入内容,如果直接将文件记录指针移动到中间某位置后开始输出,则输出的内容会覆盖文件中原有的内容。如果需要向指定位置插入内容,程序需要先把插入点后面的内容读入缓冲区,等把需要插入的数据写入文件后,再将缓冲区的内容追加到文件后面
七、 对象序列化
对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。
序列化的含义和意义:
序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以备以后重新恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,对象的反序列化(Deserialize)则指从IO流中恢复该Java对象如果需要让某个对象支持序列化机制,则必须让它的类是可序列化的(serializable)
为了让某个类是可序列化的,该类必须实现如下接口之一:
Serializable(常用):
(1)、该类必须实现的接口:ExternalizableJava很多类已经实现了Serializable,该接口是一个标记接口,实现该接口无须实现任何方法,它只是表明该类的实例是可序列化的
(2)、所有可能在网络上传输的对象的类都应该是可序列化的,否则程序将会出现异常

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值