IO流详解

字节流和字符流如何进行选择???

复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则就用字节流

复制数组用字符流
字节流有4种方式,FileInputStream,FileOutputStream和BufferedOutputStream,BufferedInputStream
分别使用一次一个字节和一次读写一个字节数组


字符流有5种方式:FileReader,FileWriter和BufferedReader,BufferedWriter
FileReader和FileWriter有两种方式:1.一次读写一个字符2.一次读写一个字符数组
BufferedReader和BufferedWriter有三种方式:1.一次读写一个字符2.一次读写一个字符数组3.一次读写一行

一:字节流

输入流:InputStream
子类有:FileInputStream
BufferedInputStream
输出流:OutputStream
子类有:FileOutputStream
BufferedOutputStream
1.FileOutputStram 字节输出流  写
(1)构造方法:
FileOutputStream(File file)
  FileOutputStream(String name):
FileOutputStream fos = new FileOutputStream(String name,boolean flag):文件追加
  习惯用第二种的构造方法,因为比第一种写着简单许多
  
(2)写操作
write(Byte [] bytes):将字节数组写入文件中
write(int num):会将数字对应的ASCI值写入文件中
write(byte[] bytes,int off,int length):将字节中从off位置起,length个长度的字节写入到文件中
  
(3)close()关闭,让打开的文件变成垃圾,被垃圾回收站回收,否则文件一直被打开,造成电脑卡
2.FileInputStream字节输入流:
(1)构造方法:
FileInputStream fis = new FileInputStream(String txt);
(2)读方法:
int read():一次读取一个字节
int read(byte[] b):一次读取一个字节数组
3.代码:

public class CopyFileDemo3 {
	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("FileOutputStramDemo.java");
		FileOutputStream fos = new FileOutputStream("b.txt");
		
		byte[] buffer = new byte[1024];		
		int len = -1;
		
		while ((len = fis.read(buffer))!=-1) {
			fos.write(buffer,0,len);
		}
		
		//int by = 0;
		//while ((by = fis.read())!=-1) {
		//	fos.write(by);
		//}		
		fis.close();
		fos.close();
	}
}

二:转换流

1.OutputStreamWriter:输出缓冲流,是字符流通向字节流的桥梁
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("osw.txt"),"utf-8");
2.InputStreamReader:输入缓冲流,是字节流通向字符流的桥梁
InputStreamReader isr = new InputStreamReader(new FileInputStream("osw.txt"));
InputStreamReader isr = new InputStreamReader(new FileInputStream("osw.txt"),"utf-8");

3.OutputStreamWriter的方法:
  public void write(int c):写一个字符
  public void write(char[] cbuf):写一个字符数组
  public void write(char[] cubf,int off,int len):写一个字符数组的一部分
  public void write(String str):写一个字符串
  public void write(String str,int off,int len):写一个字符串的一部分
4.close()和flush()的区别:

  A:close()关闭流对象,但是先刷新一个缓冲区。关闭之后,流对象不可以继续再使用了
  B:flust()仅仅刷新缓冲区,刷新之后,流对象还可以继续使用

构造方法中只有一个参数时,默认编码是gbk,有两个参数时,则编码格式是第二个参数的值

三:字符流

BufferedWriter:字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
BufferedReader:字符缓冲输入流
BufferedReader br = new BufferedReader(new FileReader("bw.txt"));

字符缓冲流的特殊方法:
  BufferedWrite:
  public void newLine():根据系统来决定换行符
  BufferedReader:
  public String readLine():一次读取一行数据
  包含该行内容的字符串,不包含任何终止符,如果已经达到流末尾,则返回null
代码:
public static void main(String[] args) throws IOException {
		BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
		BufferedReader br = new BufferedReader(new FileReader("InputStreamReaderDemo.java"));
		
		String line = null;
		while((line = br.readLine())!=null) {
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		
		bw.close();
		br.close();
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值