IO流以及序列化

1. FileWriter文件操作输出字符流

一种用于向文件中执行写操作的字符流

构造方法:

FileWriter(File file);
根据File类对象创建对应文件的文件操作输出字符流
FileWriter(String pathName);
根据String类型文件路径创建对应文件的文件操作输出字符流
FileWriter(File file, boolean append);
根据File类对象创建对应文件的文件操作输出字符流,并要求为追加写
FileWriter(String pathName, boolean append);
根据String类型文件路径创建对应文件的文件操作输出字符流,并要求为追加写

前两种构造方法是直接往文件中添加内容,会把原有内容删除之后再进行删除。后两种是追加。

成员方法:

FileWriter(File file);
根据File类对象创建对应文件的文件操作输出字符流
FileWriter(String pathName);
根据String类型文件路径创建对应文件的文件操作输出字符流
FileWriter(File file, boolean append);
根据File类对象创建对应文件的文件操作输出字符流,并要求为追加写
FileWriter(String pathName, boolean append);
根据String类型文件路径创建对应文件的文件操作输出字符流,并要求为追加写

字符流文件拷贝

public static void main(String[] args) {
		FileReader fileReader = null;
		FileWriter fileWriter = null;
		
		
		try {
			fileReader = new FileReader(new File("D:/aaa/logo桌面.jpg"));
			fileWriter = new FileWriter(new File("D:/aaa/temp.jpg"));
			
			char[] buf = new char[1024 * 4];
			int length = -1;
			
			while ((length = fileReader.read(buf)) != -1) {
				fileWriter.write(buf, 0, length);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (fileWriter != null) {
				try {
					fileWriter.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
			if (fileReader != null) {
				try {
					fileReader.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

首先,为一个文件对象创建了字符输入流以及输出流,之后定义了一个数组,数组的容量是8kb,用循环把读到的文件内容写进新文件中,这样,就完成了文件拷贝。但是由于编码集的问题,上述的代码并不能达到想要的结果。

2.缓冲流

无论是字节输入输出流还是字符的输入输出流,都需要考虑效率问题,而提高速度的一种方法就是建立缓冲流。
以上的每种io流都对应着一种缓冲流。

字节输入缓冲
BufferedInputStream
字节输出缓冲
BufferedOutputStream
字符输入缓冲
BufferedReader
字符输出缓冲
BufferedWrite

【重点】
所有的缓冲流都没有任何的读取,写入文件能力,这里都需要对应的输入流和输出流来提供对应的能力。
在创建缓冲流流对象时,需要传入对应的输入流对象和输出流对象。
底层就是提供了一个默认大小的缓冲数组,用于提高效率

字节缓冲流

输入
BufferedInputStream(InputStream in);
这里需要的对象是一个字节输入流基类对象。同时也可也传入InputStream子类对象
输出
BufferedOutputStream(OutputStream out);
这里需要的对象是一个字节输出流基类对象。同时也可也传入OutputStream子类对象

以上传入的InputStream和OutputStream都是用于提供对应文件的读写能力。

字符缓冲流

BufferedReader 字符缓冲输入流 BufferedReader(Reader reader); BufferedWriter
字符缓冲输出流 BufferedWriter(Writer writer);

对比之前,增加了两种方法:
字符缓冲输入流中
String readLine(); 读取一行数据
字符缓冲输出流中
void newLine(); 换行 (往文件中写的时候进行换行)

序列化

Java中提供了一种序列化操作的方式,用一个字节序列化来表示一个对象,该字节序列化中保存了【对象的属性】,【对象的类型】和【对象的数据】。把字节序列化保存到文件中,就可以做到持久化保存数据内容。

从文件中读取字节序列化数据,可以直接得到对应的对象。(反序列化)

ObjectOutputStream(OutputStream out);
输出字节流对象作为当前方法的参数

把输出字节流对象

 objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:/aaa/person.txt"));
			
			// 序列化对象,并且写入到文件中
			objectOutputStream.writeObject(new Person(1, "骚磊", 16));
			

把对象Person 序列化,之后写入了文件中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值