• Java学习第十六天


    1.Writer:字符输出流
      Writer:
      FileWriter
      BufferedWriter:newLine()//换行

      简单步骤:
      FileWriter fw=new FileWriter("e:\t.txt");
      fw.write("hello");//写入到内部的缓冲区,是一个字节数组
      fw.flush();

    2.字符输出流4步:
      1:创建文件输出流对象和文件相关联
      //文件可以事先存在也可以不存在,如果不存在会自动创建
      FileWriter fileWriter=new FileWriter("temp.txt");

      //2:使用文件输出流对象向文件中写入数据,每次都从文件的开头写入
      fileWriter.write("abc");//因为需要有一个查表的过程,所以数据先写入到流对象内部的缓冲区了

      //3.把缓冲区中的数据刷到文件中
      //fileWriter.flush();

      fileWriter.write("ef");

      //关闭流
      fileWriter.close(); //关闭流时会先刷新

    //fileWriter.write("ef");关闭流不能再写入数据

    标注:写入换行的方式:

    方法1; newLine()
    方法2: Properties pro=System.getProperties();
    String line= pro.getProperty("line.separator");//得到系统换行符
    FileWriter fw = new FileWriter("temp.txt");
    fw.write("hello");//每次都从文件的开头写入
    //向文件中写入换行
    fw.write(line);

     

    3.Reader:字符输入流
      FileReader
      BufferedReader: readLine()----返回的一行不包括换行符,所以要自己换行newLine()

    4.字符流输入3步:

    //读取一个文本文件
    //因为是文本所以使用字符流,又因为是读取,所以使用Reader,又因为读取的是文件,所以
    //使用Reader的可以读取文件的子类:FileReader

    //先确定使用字符流还是字节流,再确定是输出流还是输入流,最后确定设备

    1.创建字符读取流对象和被读取的文件相关联
    //被读取的文件需要存在
    FileReader fr = new FileReader("temp.txt"); // FileNotFoundException

    2.读取
    //int read() 一次读一个字符 :每次都从磁盘上取,效率低
    //因为read()读到最后,如果读不到内容了,返回-1
    int num=0;
    while((num=fr.read())!=-1){
    System.out.print((char)num);
    }

    3.//关闭流
    fr.close();


    5.FileReader类中read()方法的优化:

    定义一个char型数组,接收读出的单个字符,然后当数组满了,就返回给内存

    FileReader fr = new FileReader("temp.txt");//FileNotFoundException

    char[] arr=new char[1024];

    int num=0;
    while((num=fr.read(arr))!=-1)//从磁盘上读取时仍然是一个一个的读,当数组存满时再返回
    {
      String str=new String(arr,0,num);

      System.out.print(str);
    }

    6.因为在读写过程中都会抛出异常:IOException 或 NullPointerException 或 FileNotFoundException
      所以要接收处理异常

     1 例1:
     2 FileReader fr=new FileReader("tt.txt");
     3 
     4 int ch = fr.read();
     5 
     6 读到末尾:-1
     7 
     8 char[] arr=new char[1024];
     9 int num=0;
    10 while((num=fr.read(arr))!=-1)
    11 {
    12 System.out.print(new String(arr,0,num));
    13 }
    14 
    15 try{
    16 }catch(IOException e){
    17 
    18 }finally{
    19 
    20 if(fr!=null)
    21 fr.close();
    22 }
     1 例2:
     2 import java.io.*;
     3 class Demo1 
     4 {
     5 public static void main(String[] args) 
     6 {
     7 FileWriter fileWriter=null;
     8 
     9 try{
    10 
    11 //java.io.FileNotFoundException: h:	emp.txt (系统找不到指定的路径。)
    12 fileWriter = new FileWriter("temp.txt");//文件创建失败,那么FileWriter对象也会创建失败
    13 
    14 fileWriter.write("abc");
    15 
    16 }catch(IOException e){
    17 
    18 e.printStackTrace();
    19 
    20 }finally{
    21 try{
    22 //null.close() java.lang.NullPointerException
    23 if(fileWriter!=null)
    24 fileWriter.close();//必须执行,不一定能执行
    25 
    26 }catch(IOException e){
    27 
    28 e.printStackTrace();
    29 }
    30 }
    31 }
    32 }

    7.缓冲流:

    字符流的缓冲区:缓冲区只是为了提高读写的效率
    缓冲区不具备读写的功能
    使用缓冲区必须结合着读取流或写入流

    缓冲读取流:BufferedReader: 有一个实现了一次读一行的功能 String readLine()(注意:读到末尾时返回null)
    缓冲写入流:BufferedWriter: 有一个实现了跨平台的newLine()方法


    8.使用缓冲流向文本文件中写入数据

    1.因为缓冲流不具备写入的功能,所以需要先创建文件输出流对象
    FileWriter fw = new FileWriter("tt.txt");//用于向文件中写入数据

    2:为了提高写入的效率,使用输出缓冲流
    把需要提高效率的输出流对象传递给缓冲流对象的构造方法
    BufferedWriter bw = new BufferedWriter(fw);

    3.使用缓冲输出流对象操作文件
    for(int i=1;i<=5;i++)
    {
    bw.write("java"+i);
    bw.newLine();//写入换行
    bw.flush();
    }

    //关闭流
    //关闭缓冲流就是关闭文件输出流对象
    bw.close();

    使用缓冲流从文本文件中读取数据
    //因为缓冲流不具备读的功能,所以需要先创建文件读取流对象
    FileReader fr = new FileReader("tt.txt");

    //为了提高读取的效率,创建缓冲读取流对象
    BufferedReader br = new BufferedReader(fr);

    String line=null;
    while((line=br.readLine())!=null){
    System.out.println(line);
    }

    br.close();

    9.装饰设计模式:基于已经存在的功能提供更强大的功能  (了解:java设计模式一共有23种)

    装饰设计模式的由来:
    MediaReader
    FileReader

    提高读取的效率:
    Reader
    MediaReader
    ----BufferedMediaReader

    FileReader
    ----BufferedFileReader

    OtherReader
    ----BufferedOtherReader

    当有很多Reader子类的时候,这个体系会越来越庞大
    所以既然都是提高效率的,那么就把这个功能提取出来,谁需要被提高效率就把谁传过去

    Reader
    MediaReader
    FileReader
    OtherReader
    BufferedReader ---装饰类也属于这个体系

    class BufferedReader
    {
    private Reader r;

    public BufferedReader(Reader r)
      {
        this.r=r;
      }
    }

  • 相关阅读:
    npm升级package.json依赖包到最新版本号
    vue中 父子组件的通讯
    vue组件开发
    vue模拟后端获取数据——json-server与express
    vue-cli 2.x 搭建项目
    python socket编程
    python异常处理
    python反射
    python特殊成员函数
    Executor ExecutorService Executors
  • 原文地址:https://www.cnblogs.com/demain/p/11409705.html
Copyright © 2020-2023  润新知