zoukankan      html  css  js  c++  java
  • 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;
      }
    }

  • 相关阅读:
    bzoj3505 数三角形 组合计数
    cogs2057 殉国 扩展欧几里得
    cogs333 荒岛野人 扩展欧几里得
    bzoj1123 BLO tarjan求点双连通分量
    poj3352 road construction tarjan求双连通分量
    cogs1804 联合权值 dp
    cogs2478 简单的最近公共祖先 树形dp
    cogs1493 递推关系 矩阵
    cogs2557 天天爱跑步 LCA
    hdu4738 Caocao's Bridge Tarjan求割边
  • 原文地址:https://www.cnblogs.com/demain/p/11409705.html
Copyright © 2011-2022 走看看