javase知识点 ----19 (IO流---输入输出流)

1、输入输出概念:
  入还是出是相对于内存来说的
  把数据读到内存中,称为输入,即input,进行数据的read操作
  从内存往外部设备写数据,称为输出,即output,进行数据的write操作

2、File类
  注意:1、File类是java.io包中很重要的一个类;
       2、在程序中一个File类对象可以代表一个文件或目录;
       3、File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等;但是不能直接对文件进行读/写操作。
  
  创建对象:
  //在当前项目目录下创建一个与aaa.txt文件名相关联的文件对象
   File f1 = new File("aaa.txt");
  //指明详细的路径以及文件名,请注意双斜线或用反斜杠
    File f2 = new File("C:\\Users\\GuXue\\Desktop\\aaa.txt");
    File f3 = new File("C:/Users/GuXue/Desktop/test.txt");
  //指明详细的路径以及目录名,请注意双斜线
    File f4  = new File("C:/Users/GuXue/Desktop/java");
  
  常用方法:
  boolean exists()    判断文件是否存在,存在返回true,否则返回false
  boolean isFile()    判断是否为文件,是文件返回true,否则返回false
  boolean isDirectory()    判断是否为目录,是目录返回true,否则返回false
  String getName()    获得文件的名称
  String getAbsolutePath()    获得文件的绝对路径
  long length()                   获得文件的长度(字节数)
  boolean createNewFile()throws IOException    创建新文件,创建成功返回true,否则返回false,有可能抛出IOException异常,必须捕捉
  boolean delete()    删除文件,删除成功返回true,否则返回false
  boolean mkdir()     创建由此抽象路径名命名的目录。 eg:f4.mkdir()---创建一个目录

  public String[] list()    将目录下的子目录及文件的名字,返回到String数组中
  public File[] listFiles()    将目录下的子目录及文件的实例返回到File数组中

3、流分类
 (1)流按着数据的传输方向分为:
   -输入流:往内存中读叫输入流。类名以InputStream结尾的类和Reader结尾的类
   -输出流:从内存中往外写叫输出流。类名以OutputStream结尾的类和Writer结尾的类
 
 (2)从数据流编码格式上划分为:
   -字节流:InputStream和OutputStream的子类都是字节流;
            可以读写二进制文件,主要处理音频、图片、歌曲。处理单元为1个字节。
            常用类:FileInputStream、FileOutputStream
   -字符流:Reader和Writer的子类都是字符流;
            主要处理字符或字符串,字符流处理单元为2个字节。主要处理文本。
            常用类:FileReader、FileWriter。
    
   字符流--方式一  FileReader案例
       //创建文件对象
        File file = new File("C:/Users/GuXue/Desktop/test.txt");
        //创建流对象
        FileReader fr = new FileReader(file);
        int i = fr.read();//读一个字符 
        //边读边输出
        while(i!=-1){
            System.out.print((char)i);
            i = fr.read();
        }
        fr.close(); //关闭流并释放与之相关联的任何系统资源。

   字符流--方式二  FileReader案例   
 
       //创建流对象
        FileReader fr = new FileReader(file);
        char[] b = new char[1024];  //创建数组 
        int len = fr.read(b);// 将字符读入数组。
        
        //遍历输出
        for (int i = 0; i < len; i++) {
            System.out.println(b[i]);
        }
   字符流---FileWriter案例
        FileWriter fw = new FileWriter(file,true); //根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
        //循环写入单个字符
        for (int i = 100; i < 112; i++) {
            fw.write(i);
        }
        fw.flush();//刷新该流的缓冲

   字节流--FileInputStream
         fis = new FileInputStream(file);
        int i = fis.read();
        while(i!=-1){
          System.out.print((char)i);
           i = fis.read();
      }
  
   
 (3)根据封装类型不同流又分为
   -节点流:如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,则称为节点流。
            常用节点流对象:字节输入流 FileInputStream、字节输出流 FileOutputStream、字符输入流 FileReader、字符输出流 FileWriter
   -处理流:如果流封装的是其它流对象,称为处理流。处理流提供了缓冲功能,提高读写效率。
            常用处理流对象:缓冲字节输出流 BufferedOutputStream、缓冲字节输入流 BufferedInputStream、缓冲字符输入流 BufferedReader、缓冲字符输出流 BufferedWriter
   readLine():读取一行
   newLine():写入一个空行
   flush():内存数据刷到硬盘上。
   注意:在使用字符缓冲输出流时,一定先flush(),然后再close(),避免数据的丢失。

  处理流----BufferedReader
      //创建流对象--处理流
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line = br.readLine(); //读取一个文本行。
        while(line!=null){
            System.out.println(line);
            line = br.readLine();  
        }

  处理流---一个文件的内容复制到另一个文件中 ---BufferedWriter和BufferedReader 
        BufferedReader bfr = new BufferedReader(new FileReader(file1));  //参数体现了多态
        BufferedWriter bfw = new BufferedWriter(new FileWriter(file2));
        
        String line = bfr.readLine(); //读一行数据
        //读出一行数据,就写入一行数据
        while(line!=null){
            System.out.println(line);
            bfw.write(line); //一行一行的写入
            bfw.newLine(); //写入一个空行的方法newLine()。
            line = bfr.readLine();
        }
        bfw.flush();//刷新数据
        bfw.close();
        bfr.close();
  处理流---BufferedInputStream 和 BufferedOutputStream 
        BufferedInputStream bfr = new BufferedInputStream(new FileInputStream(file1));  //参数体现了多态
        BufferedOutputStream bfw = new BufferedOutputStream(new FileOutputStream(file2));
        
        int i = bfr.read(); //读一行数据
        //读出一行数据,就写入一行数据
        while(i!=-1){
            System.out.print((char)i);
            bfw.write(i); //一行一行的写入
            i = bfr.read();
        }
  

  (4)转换流:字符流与字节流之间的桥梁
      BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
      String line1 = bf.readLine(); 

  (5)分析步骤:
       1、读?写?先读后写
       2、字节流还是字符流?文本   字符流
       3、是否提高效率?是--处理流----BufferedReader   BufferedWriter

       代码步骤:
       1、先来创建File对象
       2、创建流对象
       3、读操作或者是写的操作   边读,边写入
       4、写的时候需要刷新
       5、关闭资源

你可能感兴趣的:(javase知识点总结)