zoukankan      html  css  js  c++  java
  • IO流_File类

           流(stream):流是一连串流动的数据(字节、字符),以先进先出的方式发送的信息的通道中。

        

           输入流

           数据从源数据源流入程序的过程称为输入流。可以理解为从源数据源读取数据到程序的过程

         

         输出流

           数据从程序流出到目的地的过程称为输出流。可以理解为把数据从程序写入目的地过程

           

           数据源一般指提供数据的原始媒介,一般常见有文件、数据库、云端、其他硬件等能提供数据的媒介。

          流的分类

          【1】按照流向分为输入流和输出流

          【2】按照处理单元分为字节流和字符流

          【3】 按照功能分为节点流和转换流

         

    2.0   InputStream/OutputStream

        InputStream是所有字节输入流的抽象父类,

       【1】提供了read读取一个字节

       【2】read(byte[] buf) 读取一定量的字节到缓冲区数组 buf中。

       

       OutputStream 是所有字节输出流的抽象父类,提供了

       【1】write() 写入一个字节

       【2】write(byte[] buf) 写入一定量的字节到输出流

         

       注意:

       【1】字符串写入文件时一定会存在编码问题

       【2】使用utf8编码写入文件时,如果不含中文时,win系统会对文件的编码造成误判。

       【3】通过字节流写入文件时,向管道写入一个字节,该字节立即写入文件中。

       

        总结

        【1】InputStream/OutputStream 用于字节的读写。主要用于读取二进制文件(图片、音频、视频),也可以读取文件性文件。

    3.0     File类

       FileInputStream 文件字节输入流,专门用于从文件中读取字节到程序内存中。

       FileOutputStream 文件字节输出流,专门用于从内存中写入字节到文件中。

       Filel类在java中表示(带路径的)文件或者目录

    public static void main(String[] args) {
            
            // 给定路径创建File对象
            // File file = new File("D:"+File.separator+"javatest"+File.separator+"a.txt");
            File file = new File("d:\javatest\b.mp3");
            System.out.println(file);
            
            // 文件基本属性
            System.out.println(file.canExecute());
            System.out.println(file.canRead());
            System.out.println(file.canWrite());
            
            // 文件的创建、删除
            if(!file.exists()) {
                
                boolean r;
                try {
                    r = file.createNewFile();
                    if(r) {
                        System.out.println("文件创建成功");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
            // 删除文件
            file.delete();
        }

       File的路径相关

    public static void main(String[] args) {
            
             File file = new File("d:\javatest\a");
    //        File file = new File("a.txt");
            
            // 获取file的绝对路径
            System.out.println(file.getAbsolutePath());
            // 获取file的创建时的路径字符串
            System.out.println(file.getPath());
            // 获取文件或者目录的名字
            System.out.println(file.getName());
            // 获取文件或者目录的父目录
            System.out.println(file.getParent());
            
        }

      File目录的创建

    public static void main(String[] args) {
            
             File file = new File("d:\javatest\c\d\e");
             
             if(!file.exists()) {
                 boolean r;
                 
                try {
                    // 一次只能创建一个目录
                    r = file.mkdir();

             // 一次能创建多个目录 r = file.mkdirs(); if(r) { System.out.println("目录创建成功"); } } catch (Exception e) { e.printStackTrace(); } } }

        FileReader 文件字符输入流

        【1】专门用于读取默认字符编码文本性文件。

        FileWriter 文件字符输出流,

          【2】专门用于写入默认字符编码的文本性文件。为了提高效率,FileWriter内部存在一个字节缓冲区,用于对待写入的字符进行统一编码到字节缓冲区,一定要在关闭流之前,调用flush方法刷新缓冲区。

         

    4.0  转换流

      InputStreamReader 继承于Reader,是字节流通向字符流的桥梁,可以把字节流按照指定编码 解码 成字符流。

      OutputStreamWriter 继承于Writer,是字符流通向字节流的桥梁,可以把字符流按照指定的编码 编码 成字节流。

      

      注意:

      【1】win平台默认的utf8编码的文本性文件带有BOM,java转换流写入的utf8文件不带BOM。所以用java读取手动创建的utf8文件会出现一点乱码(?hello中国,?是bom导致的)

      【2】一句话:用字符集编码,一定用字符集解码!!

    5.0   BufferedReader/BufferedWriter

    6.0  标准输入输出流

      【1】源数据源是标准输入设备(键盘、鼠标、触摸屏)等输入设备。在java中用System.in 得到一个InputStream字节输入流。

       需求:在控制台输入一句话,然后原样输出

    public static void main(String[] args) throws IOException {
            // 需求:输入一句话,然原样输出
            InputStream in = System.in;
            
            byte[] buf = new byte[1024];
            int len;
            // buf中包含回车和换行
            len = in.read(buf);
            
            String str = new String(buf, 0, len);
            // System.out.println(Arrays.toString(buf));
            System.out.println(str);
        }

      注意:

      [1] 标准输入流以字节流流入内存,如果在控制台中输入字符,字符以默认编码(win简体:gbk)编码成字节进入标准输入流。

    public static void main(String[] args) throws IOException {
            // 需求:从控制台高效读取一行数据。把一首诗写入文件。
            
            InputStream in = System.in;
            InputStreamReader reader = new InputStreamReader(in, "GBK");
            BufferedReader br = new BufferedReader(reader);
            
            File file = new File("d:\javatest\k.txt");
            FileWriter writer = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(writer);
            
            String end = "bye";
            while(true) {
                String line = br.readLine();
                if(line.equals(end)) {
                    break;
                }
                
                bw.write(line);
                // bw.newLine();
            }
            
            bw.flush();
            
            bw.close();
            writer.close();
            
        }

    7.0     标准输出流(PrintStream)   

        数据目的地是标准输出设备(显示器)等输出设备。在java中用System.out得到一个PrintStream 字节输出流(字节打印流)。提供了更强大的

        打印方法用于打印各种数据类型。

  • 相关阅读:
    poj 2584 T-Shirt Gumbo (二分匹配)
    hdu 1757 A Simple Math Problem (乘法矩阵)
    矩阵之矩阵乘法(转载)
    poj 2239 Selecting Courses (二分匹配)
    hdu 3661 Assignments (贪心)
    hdu 1348 Wall (凸包)
    poj 2060 Taxi Cab Scheme (二分匹配)
    hdu 2202 最大三角形 (凸包)
    hdu 1577 WisKey的眼神 (数学几何)
    poj 1719 Shooting Contest (二分匹配)
  • 原文地址:https://www.cnblogs.com/dedema/p/10851706.html
Copyright © 2011-2022 走看看