字符输入、输出流(字符缓冲数组)

字节流: 字节流读取的是文件中的二进制数据,读到的数据并不会帮你转换成你看得懂的字符。

字符流: 字符流会把读到的二进制的数据进行对应的编码与解码工作。 字符流=字节流+编码解码
输入字符流:
----------】Reader 输入字符流的基类 抽象类
-------------------】FileReader 读取文件的输入字符流。
-------------------】 BufferedReader 缓冲输入字符流,缓冲输入字符流出现的目的是为了提高读取文件字符的效率和拓展了FileReader的功能。该类内部也是维护了一个字符数组

FileReader的用法:
1.找到目标文件
2.建立数据的输入通道

 public static void readTest() throws IOException {
	  File file=new File("D:\\ecplise\\cxjt\\src\\Input\\Demo1.java");
	  //建立数据的输入通道
	  FileReader f=new FileReader(file);
	  int content=0;
	  while((content=f.read())!=-1) {//每次只读取一个字符,效率低,使用缓冲字符数组
		  System.out.print((char)content);
	  }
	  f.close();
  }

每次只读取一个字符,效率低,使用缓冲字符数组

public static void readTest2() throws IOException {
	File file=new File("D:\\ecplise\\cxjt\\src\\Input\\Demo1.java");
	  //建立数据的输入通道
	  FileReader f=new FileReader(file);
	  char[] buf=new char[1024];
	  int length=0;
	  while((length=f.read(buf))!=-1) {
		  System.out.println(new String(buf,0,length));
	  }
	  f.close();
}

BufferedReader的使用步骤:
1.找到目标文件
2.建立通道
3.建立缓冲输入字符流


输出字符流:
------】 Writer 输出字符流的基类。抽象类
---------】 FileWriter 向文件输出数据的输出字符流
FileWriter的使用步骤:
1.找到目标文件
2.建立数据输出通道
3.写出数据
4.关闭资源

      File file=new File("D:\\src\\a.txt");
	  //建立通道
	  FileReader f=new FileReader(file);
	  //建立缓冲输入字符流
	  BufferedReader buff=new BufferedReader(f);
	  int content =0;
	  //读到了一个字符,读取的字符肯定也是从BufferedReader内部的字符数组中获取得,所以效率高
       while((content= buff.read())!=-1) {
	  System.out.print((char)content);
	 }
	  buff.close();

使用BufferedReader拓展的功能,readLine() 一次读取一行文本,如果读到了文件的末尾返回

File file=new File("D:\\src\\a.txt");
	  //建立通道
	  FileReader f=new FileReader(file);
	  //建立缓冲输入字符流
	  BufferedReader buff=new BufferedReader(f);
	  String line=null;
	  while((line=buff.readLine())!=null) { //虽然readLine每次读取一行数据,但是返回的line是不包含\r\n的
		  System.out.println(line);
	  }  
 buff.close();

FileWriter要注意的事项:

  1. 使用FileWriter写数据的时候,FileWriter内部是维护了一个1024个字符数组的,写数据的时候会先写入到它内部维护的字符数组中,如果需要把数据真正写到硬盘上,需要调用flush或者close方法或者是填满了内部的字符数组。
  2. 使用FileWriter的时候,如果目标文件不存在,那么会自动创建目标文件
  3. 使用FileWriter的时候,如果目标文件已经存在了,那么默认情况会先清空文件中的数据,然后再写入数据,如果需要在原来的基础上追加数据,需要使用new FileWriter(File,boolean)的构造方法,第二参数为true。
    File file=new File("d:\\src\\a.txt");
	FileWriter f=new FileWriter(file,true);
	String data="今天天气很好!!!";
	f.write(data);
	f.flush();//刷新字符流
	f.close();//关闭资源

字符流拷贝文件(图片)

	使用字符流拷贝文件
	    File file=new File("D:\\src\\图片\\a.txt");
		File file2=new File("D:\\src\\a.txt");
		FileReader filereader=new FileReader(file);
		FileWriter filewriter=new FileWriter(file2);
		char[] ca=new char[1024];
		int content=0;
		while((content=filereader.read(ca))!=-1) {
			filewriter.write(ca,0,content);
			filewriter.flush();
		}
		filewriter.close();
		filereader.close();
	   使用字符流拷贝图片 
	    File file=new File("D:\\src\\图片\\1.jpg");
		File file2=new File("D:\\src\\12345.jpg");
		FileReader filereader=new FileReader(file);
		FileWriter filewriter=new FileWriter(file2);
		char[] ca=new char[1024];
		int content=0;
		while((content=filereader.read(ca))!=-1) {
			filewriter.write(ca,0,content);
			filewriter.flush();
		}
		filewriter.close();
		filereader.close();

为什么使用字符流拷贝图片,图片内存变小,且无法打开?
在这里插入图片描述
标准的占俩个字节,返回的未知字符占一个字节,所以会出现丢失文件的情况

何时使用字符流,何时使用字节流?依据是什么?
使用字符流的应用场景:如果是读写字符数据的时候则使用字符流。
使用字节流的应用场景:如果读写的数据都不需要转换成字符的时候,则使用字节流。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值