• 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 字节输出流(字节打印流)。提供了更强大的

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

  • 相关阅读:
    Jisa's Notebook
    前端常见跨域解决方案
    串口
    logging的使用
    Hexo
    优美的二维树状数组
    数据结构之树的基本概念
    js 监听ios手机键盘弹起和收起的事件
    jquery.qrcode.js生成二维码(前端生成二维码)
    js产生一个随机的字符串数字组合
  • 原文地址:https://www.cnblogs.com/dedema/p/10851706.html
Copyright © 2020-2023  润新知