Java的流

一、IO流

1、概述

IO流用来处理设备之间的数据传输(上传文件和下载文件)

Java对数据的操作时通过流的方式,Java用于操作流的对象在IO包内

2、分类

1)按照数据类型:字节流,字符流(为了方便操作文本数据,Java提供了字符流)

2)按照数据流向:输入流(读入数据),输出流(写出数据)

3、用法

1)字节型文件输入流(读取,FileInputStream)

若路径存在问题,则会报错

方法:

int code = read();一次读取一个字节

int count = read(byte[] b);一次读取一个字节数组

2)字节型文件输出流(写入,FileOutputStream)

若路径存在问题,则会新建一个文件夹

方法:

public void write(int b);

public void write(byte[] b);

3)字符型文件输入流(读取,FileReader)

int read();一次读取一个字符

int read(char[] chs);一次读取一个字符数组

4)字符型文件输出流(写入,FileWriter)

public void write(int c);写入一个字符

public void write(char[] value);写入一个字符数组

public void write(char[] value, int off, int len);写一个字符数组的一部分

public void write(String str);写一个字符串

public void write(String str, int off, int len);写一个字符串的一部分

5)字节输出/输入的步骤

  • 创建字节输入/输出流对象
  • 调用read()/write()方法读取/写入数据
  • 释放资源

二、缓冲流(高效类)

1、字节型

BufferedInputStream/BufferedOutputStream

2、字符型

BufferedReader/BufferedWriter

3、缓冲流的调用格式

File file = new File(路径);

FileInputStream fis = new FileInputStream(file);

BufferedInputStream bis = new BufferedInputStream(fis);

4、 字符型的独有方法

String value = br.readLine();

String value = br.newLine();

注意:

1)close()关闭流对象,但是先刷新一次缓冲区,关闭之后,流对象不可以继续再使用了

2)flush()清空内存缓冲区数据,仅仅刷新缓冲区,刷新之后,流对象不可以就行再使用

三、打印流

1、分类

字节打印流:PrintStream

字符打印流:PrintWriter

2、特点

1)只能操作目的地,不能操作数据

2)可以操作任意类型的数据

3)如果启动了自动刷新,能够自动刷新

4)可以操作文件的流

四、标准输入输出流

System类中的字段:in,out

它们各代表了系统便准的输入和输出设备

默认输入设备是键盘,输出设备是显示器

System.in的类型是InputStream

System.out的类型是PrintStream

五、随机访问流

1、概述

RandomAccessFile类不属于流,是Object类的子类,但他融合了InputStream和OutputStream的功能,支持对随机访问文件读取和写入

2、方法

public RandomAccessFile(String name, String mode);

第一个参数是文件路径,第二个参数是操作文件的模式

六、合并流

1、概述

SequenceInputStream类可以将多个输入流串流在一起,合并为一个输入流

2、方法

SequenceInputStream(InputStream s1, InputStream s2);

SequenceInputStream(Enumeration<?extends InputStream> e)

把多个文件内容写到一个文本文件里

Enumeration是Vector中的一个方法的返回值类型

七、序列流

1、概述

序列流(ObjectOutputStream):把对象按照流一样的方式存入文本文件或者在网络中传输

反序列流(ObjectInputSream):把文本文件中的流对象数据或者网络中的流对象数据还原成对象

2、未序列化异常(NoSerialzableException)

类通过实现java.io.Serialzable接口,已启用其序列化功能,未实现此接口的类将无法使用任何状态序列化或者反序列化。该接口没有任何方法,类似于这种没有方法的接口被称为标记接口

注意:

1)类实现了序列化接口时,需要产生一个序列化id值,而产生这个值后,对类进行任何改动,读取以前的数据是没有问题的

2)使用transient关键字声明不需要序列化的成员变量

八、Properties

1、概述

Properties是一个可以和IO流相结合使用的集合类,可以保存在流中或从流中加载,属性列表每个键及其对应值都是一个字符串

2、方法

public Object setProperty(String key, String value);添加元素

public String getProperty(String key);根据键获取元素

public Set<String> stringPropertyNames();获取所有键的集合

3、Properties和IO流的结合使用

public void load(Reader reader);把文件的数据读取到集合中

public void store(Writer writer, String comments);把集合中的数据存储到文件

注意:

1)集合必须是Properties集合

2)文件的数据必须是键值对形式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z.haoui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值