二、字符流

二、字符流

  1. 字符流简介:
  • 字符流中的对象融合了编码表,也就是系统默认的编码表。我们的系统一般都是utf-8编码。

  • 字符流只用来处理文本数据,字节流用来处理媒体数据。

  • 数据最常见的表现方式是文件,字符流用于操作文件的子类一般是FileReader和FileWriter。
    2.字符流读写:
    注意事项:

  • 写入文件后必须要用flush()刷新。

  • 用完流后记得要关闭流

  • 使用流对象要抛出IO异常

  • 定义文件路径时,可以用“/”或者“\”。

  • 在创建一个文件时,如果目录下有同名文件将被覆盖。

  • 在读取文件时,必须保证该文件已存在,否则出异常
    示例1:在硬盘上创建一个文件,并写入一些文字数据

[java] view plain copy

  1. class FireWriterDemo {
  2.  public static void main(String[] args) throws IOException {             //需要对IO异常进行处理   
    
  3.      //创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。  
    
  4.      //而且该文件会被创建到指定目录下。如果该目录有同名文件,那么该文件将被覆盖。  
    
  5.      FileWriter fw = new FileWriter("F:\\1.txt");//目的是明确数据要存放的目的地。  
    
  6.      //调用write的方法将字符串写到流中  
    
  7.     fw.write("hello world!");  
    
  8.     //刷新流对象缓冲中的数据,将数据刷到目的地中  
    
  9.     fw.flush();  
    
  10.     //关闭流资源,但是关闭之前会刷新一次内部缓冲中的数据。当我们结束输入时候,必须close();  
    
  11.     fw.write("first_test");  
    
  12.     fw.close();  
    
  13.     //flush和close的区别:flush刷新后可以继续输入,close刷新后不能继续输入。  
    
  14. }  
    
  15. }

示例2:FileReader的reade()方法.
要求:用单个字符和字符数组进行分别读取

[java] view plain copy

  1. class FileReaderDemo {
  2.  public static void main(String[] args) {  
    
  3.      characters();  
    
  4.  }  
    
  5. /字符数组进行读取****/
  6.  private static void characters() {  
    
  7.     try {  
    
  8.         FileReader fr = new FileReader("Demo.txt");  
    
  9.         char []  buf = new char[6];   
    
  10.         //将Denmo中的文件读取到buf数组中。  
    
  11.         int num = 0;      
    
  12.         while((num = fr.read(buf))!=-1) {  
    
  13.             //String(char[] value , int offest,int count) 分配一个新的String,包含从offest开始的count个字符  
    
  14.             sop(new String(buf,0,num));  
    
  15.         }  					I love you
    
  16.         sop('\n');  
    
  17.         fr.close();  
    
  18.     }  
    
  19.     catch (IOException e) {  
    
  20.         sop(e.toString());  
    
  21.     }  
    
  22. }  
    
  23. /单个字母读取********/
  24. private static void singleReader() {  
    
  25.     try {  
    
  26.         //创建一个文件读取流对象,和指定名称的文件关联。  
    
  27.         //要保证文件已经存在,否则会发生异常:FileNotFoundException  
    
  28.         FileReader fr = new FileReader("Demo.txt");  
    
  29.         //如何调用读取流对象的read方法?  
    
  30.         //read()方法,一次读取一个字符,并且自动往下读。如果到达末尾则返回-1  
    
  31.         int ch = 0;  
    
  32.         while ((ch=fr.read())!=-1) {  
    
  33.             sop((char)ch);  
    
  34.         }  
    
  35.         sop('\n');  
    
  36.         fr.close();  
    
  37.         /*int ch = fr.read(); 
    
  38.         sop("ch=" + (char)ch); 
    
  39.         int ch2 = fr.read(); 
    
  40.         sop("ch2=" + (char)ch2); 
    
  41.         //使用结束注意关闭流 
    
  42.         fr.close(); */    
    
  43.     }  
    
  44.     catch (IOException e) {  
    
  45.         sop(e.toString());  
    
  46.     }  
    
  47. }  
    
  48. /Println**/
  49. private static void sop(Object obj) {  
    
  50.     System.out.print(obj);  
    
  51. }  
    
  52. }

示例3:对已有文件的数据进行续写

[java] view plain copy

  1. import java.io.*;
  2. class FileWriterDemo3 {
  3.  public static void main(String[] args) {  
    
  4.      try {  
    
  5.          //传递一个参数,代表不覆盖已有的数据。并在已有数据的末尾进行数据续写  
    
  6.          FileWriter fw = new FileWriter("F:\\java_Demo\\day9_24\\demo.txt",true);  
    
  7.          fw.write(" is charactor table?");  
    
  8.         fw.close();  
    
  9.     }  
    
  10.     catch (IOException e) {  
    
  11.         sop(e.toString());  
    
  12.     }  
    
  13. }  
    
  14. /Println**/
  15. private static void sop(Object obj)  
    
  16. {  
    
  17.     System.out.println(obj);  
    
  18. }  
    
  19. }

练习:
将F盘的一个文件复制到E盘。
思考:
其实就是将F盘下的文件数据存储到D盘的一个文件中。
步骤:
1.在D盘创建一个文件,存储F盘中文件的数据。
2.定义读取流和F:盘文件关联。
3.通过不断读写完成数据存储。
4.关闭资源。
源码:

[java] view plain copy

  1. import java.io.*;
  2. import java.util.Scanner;
  3. class CopyText {
  4.  public static void main(String[] args) throws IOException {  
    
  5.      sop("请输入要拷贝的文件的路径:");  
    
  6.      Scanner in = new Scanner(System.in);  
    
  7.      String source = in.next();  
    
  8.      sop("请输入需要拷贝到那个位置的路径以及生成的文件名:");  
    
  9.     String destination = in.next();  
    
  10.     in.close();  
    
  11.     CopyTextDemo(source,destination);  
    
  12. }  
    
  13. /文件Copy****/
  14. private static void CopyTextDemo(String source,String destination) {  
    
  15.     try {  
    
  16.         FileWriter fw = new FileWriter(destination);  
    
  17.         FileReader fr = new FileReader(source);  
    
  18.         char []  buf = new char[1024];   
    
  19.         //将Denmo中的文件读取到buf数组中。  
    
  20.         int num = 0;      
    
  21.         while((num = fr.read(buf))!=-1) {  
    
  22.                            //String(char[] value , int offest,int count) 分配一个新的String,包含从offest开始的count个字符  
    
  23.             fw.write(new String(buf,0,num));  
    
  24.         }  
    
  25.         fr.close();  
    
  26.         fw.close();  
    
  27.     }  
    
  28.     catch (IOException e) {  
    
  29.         sop(e.toString());  
    
  30.     }  
    
  31. }  
    
  32. /Println**/
  33. private static void sop(Object obj) {  
    
  34.     System.out.println(obj);  
    
  35. }  
    
  36. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值