IO总结

java中IO总结

IO指的是一组有顺序的、有起点的(程序),有终点的(外部设备)字节数据的集合,是对数据传输的抽象

文件

文件分类

文件分为:文本文件和二进制文件
eg. 十进制199 文本文件 ‘1’ ‘9’ ‘9’ 二进制文件 1100 0111

File类

File类的创建

File类可以通过文件路径来创建File实例

File file = new File("pathName");

其中路径分为绝对路径和相对路径
绝对路径:C://xxx/xxx/xxx /User/xxx
相对路径:.表示当前目录 …表示上一级目录

file中的方法

1)方法
boolean exists 表示当前路径是否存在
boolean isFile 判断当前路径是否是文件
boolean isDirectory 判断当前路径是否是一个文件夹
boolean isHidden 判断当前路径是否是一个隐藏文件
boolean delete 直接删除
boolean createNewFile 创建新文件
file.mkdir 创建目录
file.getName 获取文件名
file.getAbsolutePath 获取文件绝对路径
file.listFiles 获取当前路径下的所有文件
2)方法的使用
https://blog.csdn.net/weili222/article/details/109492084

IO

IO指的是一组有顺序的、有起点的(程序),有终点的(外部设备)字节数据的集合,是对数据传输的抽象

java.io(Input/Output)

Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。

流(Stream)

什么是流

流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”。

流的分类

1)按照流向:分为输入流和输出流
输入流:从数据源读取数据到程序的过程
输出流:从程序将数据流向数据源的过程
2)按照传输的类型:分为字符流和字节流
a.字符流可以处理字符,字节流可以处理字节,处理任意类型的对象
b.字符流:将原始数据解析为字符的序列,是会依赖当前平台的编码方式,字符流的输入和输出需要进行编码和解码
字节流:将数据解析为二进制数据,读写均为字节数据。所以效率比较高。
c.二进制数据不需要进行编码和解码,可移植性更高一些,与主机的编码方式无关
3)按照角色:分为节点流和处理流(装饰器设计模式)
节点流(低级流):程序直接相连得到的数据源
处理流(高级流):在已存在的流之上做了一层封装,通过封装之后的类来实现读取/写入的功能

字节流

InputStream:所有字节输入流的父类,所有的字节输入流都要继承该类。
OutputStream:所有字节输出流的父类,所有的字节输出流都要继承该类。
InputStream(输入流):输入流是用来读入数据的。- - - 读入
OutputStream(输出流):输出流是用来写出数据的。- - - 写出

字符流

Reader:所有字符输入流的父类,所有的字符输入流都要继承该类。
Writer:所有字符输出流的父类,所有的字符输出流都要继承该类

FileInputStream和FileOutputStream

FileInputStream(文件输入流)

从文件系统中的某个文件中获得输入字节。FileInputStream 用于读取诸如图像数据之类的原始字节流。

FileOutoutStream(文件输出流)

文件输出流是用于将数据写入 File的输出流。

具体使用和一些属性

FileInputStream和FileOutputStream的具体使用和属性:
https://blog.csdn.net/weili222/article/details/109518619

FileReader和FileWriter

FileReader(字符输入流)

用来方便的从文件中读出字符的类

FileWriter(字符输出流)

用来方便的将字符数据写入文件的类

具体使用和一些属性

FileReader和FileWriter的具体使用方法和属性:
https://blog.csdn.net/weili222/article/details/109538527

转换流和缓冲流 (高级流)

转换流

(1)输入流 ->实际是字节流通向字符流的桥梁 (InputStreamReader)
(2)输出流 ->实际是字符流通向字节流的桥梁 (OutputStreamWriter)
OutStreamWriter可以指定编码表,将流中字符按照编码表转换为字节
InputStreamReader可以指定编码表读取字节将其按照编码解析为字符

具体的使用

OutStreamWriter和InputStreamReader使用:
https://blog.csdn.net/weili222/article/details/109544677

缓冲流

以字节流为例,BufferedInuputStream/BufferedOutputStream,BufferedInputStream内置一个缓冲数组,其会一次性读取8192字节的数据存入缓冲区当中,BufferedOutStream直接从缓冲区中拿到数据,写入到磁盘。

BufferedInuputStream

BufferedInputStream:缓冲字节输入流,是一个高级流(处理流),与其他低级流配合使用。

BufferedOutputStream

BufferedOutputStream:缓冲字节输出流是一个高级流(处理流),与其他低级流配合使用。

具体使用和一些属性

BufferedInuputStream和BufferedOutputStream具体使用和一些属性:https://blog.csdn.net/weili222/article/details/109544121

序列化和反序列化

概念

对象的序列化是一个将对象转换为字节流的过程,可以将其永久的保存在磁盘上或者在网络中传输到其他任何地方;反之,就将磁盘上的字节流恢复成对象的过程称之为反序列化。

序列化和反序列化所要用到的流
ObjectOutputStream和 ObjectInputStream

ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。

具体的使用和一些属性

ObjectOutputStream和 ObjectInputStream的具体使用和属性:
https://blog.csdn.net/weili222/article/details/109562041

RandomAcessFile

自由的访问文件任意位置,进行读写操作。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

具体的使用和一些属性

RandomAcessFile的具体使用和属性:
https://blog.csdn.net/weili222/article/details/109563595

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
java中的IO操作总结(四) 前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; @SuppressWarnings("serial") //一个类要想实现序列化则必须实现Serializable接口 class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return "Name:" + this.name + ", Age:" + this.age; } } public class Demo { public static void main(String[] args) { String path = File.separator + "home" + File.separator + "siu" + File.separator + "work" + File.separator + "demo.txt"; Person p1 = new Person("zhangsan",12); Person p2 = new Person("lisi",14); //此处创建文件写入流的引用是要给ObjectOutputStream的构造函数玩儿 FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = new FileOutputStream(path); oos = new ObjectOutputStream(fos); //这里可以写入对象,也可以写入其他类型数据 oos.writeObject(p1); oos.writeObject(p2); } catch (IOException e) { e.printStackTrace(); } finally { try { oos.close(); } catch (IOException e) { e.printStackTrace(); } } } } 解压密码 www.jiangyea.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值