IO字符流

本文详细介绍了Java中的字符流概念,包括字符流的基本原理、如何使用FileReader和FileWriter进行读写操作,以及如何高效地进行读写操作。此外,还探讨了字符流在实际开发中的应用,如文本文件的读写、特定编码表的使用等,并提供了实例代码以加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 

 

.字符流

         1.字符流是什么

                   字符流是可以直接读写字符的IO

                   字节流只能读写字节.如果要读取字符,就要先读取到字节数据,然后转为字符.如果要写出字符,需要把字符转为字节再写出.   

         2.FileReader,FileWriter

         FileReader类的read()方法可以按照字符大小读取

       1、循环读出里面的字符

     

 FileReader fr =new FileReader("aaa.txt");
		int ch;
		while((ch = fr.read())!=-1){
			System.out.print((char)ch);
		}
		fr.close();
        FileWriter fw = new FileWriter("bbb.txt");
		fw.write("fighting,努力,123,%%^&");
		fw.close();


;

         FileWriter类的write()方法可以自动把字符转为字节写出

      

  实现读写操作:

   方式一

  

FileReader fr = new FileReader("aaa.txt");
		FileWriter fw = new FileWriter("bbb.txt");
		int ch;
		while ((ch = fr.read())!=-1){
			fw.write(ch);
		}
		fr.close();
		fw.close();


 

  方式二

   

 FileReader fr = new FileReader("day21笔记.txt");
	    FileWriter fw = new FileWriter("copy.txt"); 
	    char [] arr = new char[1024];
	    int len;
	    while((len = fr.read(arr))!=-1){
	    	fw.write(arr,0,len);


 

  方式三

   

BufferedReader  br = new BufferedReader(new FileReader("day21笔记.txt"));
		BufferedWriter  bw = new BufferedWriter(new FileWriter("copy.txt"));
		int len;
		while((len = br.read())!=-1){
			bw.write(len);
		}
		br.close();
		bw.close();


 

         3.什么情况下使用字符流

                   字符流也可以拷贝文本文件,但不推荐使用.因为读取时会把字节转为字符,写出时还要把字符转回字节.(拷贝文件的时候建议使用字节流)

字符流作用:

    1、只读因为通过编码表按照一个字符一个字符的读取,不会出现半个中文。

    2、只写可以直接写出字符串

                   程序需要读取一段文本,或者需要写出一段文本的时候可以使用字符流

         4.带缓冲的字符流

                   BufferedReaderread()方法读取字符时会一次读取若干字符到缓冲区,然后逐个返回给程序,降低读取文件的次数,提高效率

                   BufferedWriterwrite()方法写出字符时会先写到缓冲区,缓冲区写满时才会写到文件,降低写文件的次数,提高效率

写满空间的时候调用flush()方法,close()关闭流之前调用flash刷新剩下的数据;

                   BufferedReaderreadLine()方法可以读取一行字符(不包含换行符号)

                   BufferedWriternewLine()可以输出一个跨平台的换行符号"\r\n"

BufferedReader  br = new BufferedReader(new FileReader("day21笔记.txt"));
		BufferedWriter  bw = new BufferedWriter(new FileWriter("copy.txt"));
		String str;
		while((str = br.readLine())!=null){
			bw.write(str);
			//bw.write("\r\n");
			bw.newLine();
		}

 

         5.LineNumberReader

                   LineNumberReaderBufferedReader的子类,具有相同的功能,并且可以统计行号

                   调用getLineNumber()方法可以获取当前行号

                   调用setLineNumber()方法可以设置当前行号

         6.使用指定的码表读取字符

                   FileReader是使用默认码表读取文件,如果需要使用指定码表读取,那么可以使用InputStreamReader(字节流,编码表)

                   FileWriter是使用默认码表写出文件,如果需要使用指定码表写出,那么可以使用OutputStreamWriter(字节流,编码表)

 

.今日重点

         1.会用BufferedReader读取GBK码表和UTF-8码表的字符

         2.会用BufferedWriter写出字符到GBK码表和UTF-8码表的文件中

         3.会使用BufferedReader从键盘读取一行

         4.会用字节数组拷贝文件,会用BufferedInputStreamBufferedOutputStream拷贝文件

 

flush close的区别

1flash方法可以将缓冲区的数据刷到文件上,调用之后还可以继续调用写的方法

2close方法可以关闭流,在关闭流之前会将缓冲区的中的有效字符刷出来,然后在关闭,如果不关闭就不能再调用写的方

 

使用流对象尽量使晚开早关

 

* 设计模式之装饰设计模式  //实现包装
	 */
	public static void main(String[] args) {
		Student s = new Student();// 学生类开始有的功能
		s.code();
		
		ItcastStudent is = new ItcastStudent(new Student());
		is.code(); //学生包装后的功能
	}

}
interface Coder {
	public void code();
}

class Student implements Coder {
	@Override
	public void code() {
		System.out.println("javase");
		System.out.println("javaweb");
	}
	
}
class ItcastStudent implements Coder {
	private Student s;
	public ItcastStudent(Student s) {
		this.s = s;
	}
	@Override
	public void code() {
		s.code();
		System.out.println("ssh");
		System.out.println("安卓");
		System.out.println("ios");
		System.out.println("数据库");
		System.out.println("............");
	}
	
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值