IO流总结1

1.IO流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.分类

1.数据源、目的

​ 源:InputStream Reader

​ 目的:OutputStream Writer

2.字节、文本

​ 源:

​ 字节:InputStream(音频视频图片文件)

​ 文本:Reader(文本)

​ 目的:

​ 字节:OutputStream

​ 文本:Writer

3.所在设备

​ 源设备:

​ 硬盘:文件 File开头。

​ 内存:数组,字符串。

​ 键盘:System.in;

​ 网络:Socket

​ 目的设备:

​ 硬盘:文件 File开头。

​ 内存:数组,字符串。

​ 屏幕:System.out

​ 网络:Socket

​ 完全可以明确具体要使用哪个流对象。

4.特殊功能流

​ 额外功能:

​ 转换流。InputStreamReader OutputStreamWriter

​ 缓冲区对象。BufferedXXX

2.常见的流

1.抽象父类

1.字节流抽象父类

​ InputStream

​ OutputStream

2.字符流抽象父类

​ Reader

​ Writer

2.字符流

1.FileWriter

构造函数,加上true是续写

注意点:
1.文件不存在直接创建
2.路径找不到会报错
3.执行write方法是,数据被临时放到了流对象的内部字节数组中,然后自己区查编码表
4.刷新
flush()将临时数组中的数据放入磁盘
5.关闭流
close关闭流(默认执行一次刷新)

 void write(int c)
// 写入单个字符
void write(String str)  
// 写入字符串
 void write(String str, int off, int len) 
 //写入字符串的某一部分
 void write(char[] cbuf)  
// 写入字符数组
 abstract  void write(char[] cbuf, int off, int len)  
// 写入字符数组的某一部分
2.FileReader

1.读方法(-1就是读完了)
read():一个字符一个字符的读,返回ascii码
read(数组):一次独处多个字符,字符临时存到这个数组,返回每次的读到的字符个数
数组的大小一般1kB。返回值代表本次读到的真实的字符个数如果。

  int read() 

//读取单个字符

 int read(char[] cbuf) 

	// 将字符读入数组
3.文件复制实战
public static void main(String[] args) throws IOException {
		//1.创建读入流和写出流
		FileReader fileReader = new FileReader("D:\\workspace/BigData1923N19\\src\\com\\qf\\test\\Demo1.java");
		FileWriter fileWriter = new FileWriter("Demo1copy.java");
	    int num =0 ;

	//使用一次读多行
	char[] arr = new char[10];
	while ((num = fileReader.read(arr)) != -1) {
		fileWriter.write(arr,0,num);//可以实现自动转换
		fileWriter.flush();
	}
	
	fileReader.close();
	fileWriter.close();
}

2.字节流

注意:换行符 /r/n 是两个字符,所以读取时也会读取这俩

1.FileInputStream
//将数据写入磁盘
	public static void write() throws IOException {
		//1.创建字节输出流并关联文件
		FileOutputStream fileOutputStream = new FileOutputStream("test1.txt");
		//2.写--这里只能写字节
		fileOutputStream.write("bingbing".getBytes());
		//3.关闭资源
		fileOutputStream.close();
	}
2.FileOutputStream
//读1 一次读一个字节
public static void read1() throws IOException {
	//1.创建字节输入流并关联文件
	FileInputStream fileInputStream = new FileInputStream("test1.txt");
	//2.读
	int num = 0;
	while ((num = fileInputStream.read()) != -1) {
		System.out.print((char)num);
	}
	//3.关闭资源
	fileInputStream.close();
}
//读2   一次读多个字节
public static void read2() throws IOException {
	//1.创建字节输入流并关联文件
	FileInputStream fileInputStream = new FileInputStream("test1.txt");
	//2.读
	int num = 0;
	byte[] bytes = new byte[5];
	while ((num = fileInputStream.read(bytes)) != -1) {
		System.out.print(new String(bytes,0,num));
	}
	//3.关闭资源
	fileInputStream.close();
}
//读3  一次全部读完
public static void read3() throws IOException {
	//1.创建字节输入流并关联文件
	FileInputStream fileInputStream = new FileInputStream("test1.txt");
	//获取文件的字节个数
	//注意:这种方式适合文件的字节数比较小的时候,大概是几kb之内.
	int num1 = fileInputStream.available();
	//2.读
	byte[] bytes = new byte[num1];
	fileInputStream.read(bytes);
	System.out.println(new String(bytes));
	//3.关闭资源
	fileInputStream.close();
}
3.文件复制实战
//1.创建字节输入流
		FileInputStream fileInputStream = new FileInputStream("D:\\workspace\\BigData1923N20\\100.jpg");
		//2.创建字节输出流
		FileOutputStream fileOutputStream  = new FileOutputStream("D:\\workspace\\BigData1923N20\\100copy.jpg");
		//3.进行读写
		int num = 0;
		while ((num = fileInputStream.read()) != -1) {
			fileOutputStream.write(num);
		}
		fileInputStream.close();
		fileOutputStream.close();

3.字符缓冲流

注意:字符缓冲没有读写的能力,必须借助于字符流实现。

1.BufferedWriter

构造方法

BufferedWriter = new BufferedWriter(new FileWriter());

bufferedWriter.newLine();//换行—支持跨平台

2.BufferedReader

一次读一行 readline()

原理:一个字符一个字符的读,直到读到换行符为止.然后将所有读到的字符返回
注意点:不会将当前的换行符返回 ;返回值就是我们读到的内容.如果读完了,返回null

3.文本复制实战
//1.创建读入流和写出流
		FileReader fileReader = new FileReader("D:\\workspace/BigData1923N19\\src\\com\\qf\\test\\Demo1.java");
		FileWriter fileWriter = new FileWriter("Demo1copy.java");
		BufferedReader bufferedReader = new BufferedReader(fileReader);
		BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
		//读写
		//使用一次读一个
		int num =0 ;
		while ((num = bufferedReader.read()) != -1) {
			bufferedWriter.write(num);//可以实现自动转换
			fileWriter.flush();
		}
		

	//使用一次读多行

//		char[] arr = new char[10];
//		while ((num = bufferedReader.read(arr)) != -1) {
//			bufferedWriter.write(arr,0,num);//可以实现自动转换
//			fileWriter.flush();
//		}
		

	//使用一次读一行
	String data = null;
	while ((data = bufferedReader.readLine()) != null) {
		bufferedWriter.write(data);
		bufferedWriter.newLine();
		bufferedWriter.flush();
	}
	
	bufferedReader.close();
	bufferedWriter.close();

}
4.LinenumberReader

特点:是BufferedReader的子类,不能读.但是可以提高效率,特有功能:设置行号,获取行号

LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(""));
		//设置行号,默认从0开始,从1开始打印
		lineNumberReader.setLineNumber(10);
		String data = null;
		while ((data = lineNumberReader.readLine()) != null) {
			System.out.print(lineNumberReader.getLineNumber());//获取行号
			System.out.print(data);
			System.out.println();
		}
		lineNumberReader.close();

5.字节缓冲流

一般是用字符缓冲流,因为有readline和newline

1.BufferedInputStream

和字符缓冲流差不多

2.BufferedOutputStream

和字符缓冲流差不多

3.复制文件实战
//1.创建字节输入流
		FileInputStream fileInputStream = new FileInputStream("D:\\workspace\\BigData1923N20\\100.jpg");
		BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
		//2.创建字节输出流
		FileOutputStream fileOutputStream  = new FileOutputStream("D:\\workspace\\BigData1923N20\\100copy1.jpg");
		BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
		//3.进行读写
		int num = 0;
		while ((num = bufferedInputStream.read()) != -1) {
			bufferedOutputStream.write(num);
		}

bufferedInputStream.close();
bufferedOutputStream.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值