• IO流技术


    Java.io包:

    Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。在整个java.io包中最重要的就是5个类和3个接口:

    说明
    File 文件类
    InputStream 字节输入流
    OutputStream 字节输出流
    Reader 字符输入流
    Writer 字符输出流   
    Closeable 关闭流接口
    Flushable 刷新流接口
    Serializable 序列化接口

     

     

     

     

     

     

     

     

     

     

     

     

     


     流分类:

    1. 输入流:数据源到程序(InputStream、Reader读进来)。
    2. 输出流:程序到目的地(OutputStream、Writer写出去)。
    3. 节点流:可以直接从数据源或目的地读写数据。
    4. 字节流:按照字节读取数据(InputStream、OutputStream)。
    5. 字符流:按照字符读取数据(Reader、Writer)。

    输入流、输出流的子类层次图:

    使用 File 类的 mkdirs() 、mkdir() 创建目录:

    mkdir() :  创建此抽象路径名指定的目录,必须在有父类的文件夹下创建文件 。 
    mkdirs() :  创建此抽象路径名指定的目录。不确定此文件夹是否存在,不确定父文件夹存在。

    使用 File 类的 mkdirs() 实现递归创建目录 演示:

     

    package com.company;
    
    import java.io.File;
    
    /**
     * author Gsan
     */
    public class TestMkdirs {
        public static void main(String[] args){
            String path="C:/b/b/1.txt";
            File f=new File(path);
            boolean flag=f.mkdirs();
            System.out.println(flag);
        }
    }

    运行结果:


    使用 File 类的dir.isDirectory(), dir.list() 和 dir.isdelete() 方法删除目录:

    boolean dir.isDirectory();是否目录,返回boolean型。

    dir.list();目录存储在List容器。

    boolean dir.isdelete();是否删除目录,返回boolean型。

    package com.company;
    
    import java.io.File;
    
    /**
     * author Gsan
     */
    public class TestDirdelete {
        public static void main(String[] args) {
            //删除C盘目录下b目录
            deleteDir(new File("C:/b/b"));
        }
    
        private static boolean deleteDir(File dir) {
            if (dir.isDirectory()) {
                String[] c = dir.list();//要删除目录下的所有目录和文件
                for (int i = 0; i < c.length; i++) {
                    boolean flag = deleteDir(new File(dir, c[i]));
                    if (!flag) {
                        return false;
                    }
                }
            }
            if(dir.delete()){
                System.out.println("目录删除成功");
                return true;
            }else{
                System.out.println("目录删除失败");
                return false;
            }
        }
    
    }

     运行结果:


     IO控制台输入:

    每当IO控制台输入字符,需要一个一个地读取字符时,应调用BufferedReader缓冲流将字符读取到缓冲区,再调用read();去读取字符,此过程提高性能。

    package com.company;
    
    import java.io.*;
    
    /**
     * IO控制台输入
     * 一个一个地读取字符
     * 用read();
     * author Gsan
     */
    public class TestIOsystemin {
    
    
        public static void main(String[] args) throws IOException {
    
            char c=0;
            BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("请输入字符,按下‘E’键退出");
            do{
                //一个一个地读取字符
                c= (char) bw.read();
                System.out.println(c);
            }while(c!='E');
        }
    }

    运行结果:


    IO控制台输入字符串:

    用控制台输入字符串然后再读取,同样调用缓冲流将字符串读取进缓冲区,再调用readLine()读取到及控制台,提高性能。

    package com.company;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    /**
     * IO控制台输入字符串
     * 读取字符串
     * 用readLine();
     * author Gsan
     */
    public class TestIOsystemin2 {
        public static void main(String[] args) throws IOException {
            String str;
            BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
            System.out.println("请输入字符串:用字符串‘end’结束程序!");
            do{
                str=bw.readLine();
                System.out.println(str);
            }while(!bw.readLine().equals("end") );
        }
    }

    运行结果:

    这里解释一下用do-while循环而没有用while循环,因为do-while循环先先执行一次,再判断条件,而while先判断条件,再执行,那么我们的Enter回车也属于字符,假如用while就会把Enter也看做字符,这样就会陷进死循环,无法执行。


     从File源码了解File:

    上图为File源码构造方法的导图,我们常用的是中间三种方法创建File对象,下面将着重分析这三种方法。

    1.File(String):

    用此方法创建File对象时,String部分的字符应是File的路径,且路径名不能为null。

    例如:

     String path = "C:/用户/tanjianjie/project/io/a.txt";
    
            //构建File对象方法一
            File src=new File(path);

    2.File(String,String):

    由上图分析可知,路径可分两部分,一部分是父路径,即是File的父目录;一部分是子路径,即是存在父目录下的File路径。

    例如:

    src=new File(new File("C:/用户/tanjianjie/project"),"io/a.txt");

    3.File(File,String):

    此方法与第二种方法类似。

    File源码中还提供了多种获取方法和判断方法:

    获取名称、父路径、上级文件、路径、绝对路径等等。

    判断文件是否存在、是否目录、是否文件、是否隐藏、是否绝对路径等等。



  • 相关阅读:
    51nod 1254 最大子段和 V2
    51nod 1115 最大M子段和 V3
    51nod 1053 最大M子段和 V2
    51nod 1052 最大M子段和
    51nod 1051 最大子矩阵和
    web.config或App.config中AttachDBFilenamex相对路径问题
    [转帖]unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(主要讲区别)
    unity3d 第一人称脚本解释MouseLook
    unity3d-游戏实战突出重围,整合游戏
    unity3d-游戏实战突出重围,第四天 添加角色
  • 原文地址:https://www.cnblogs.com/Gsan/p/10511774.html
Copyright © 2020-2023  润新知