I/O流

绿林寻猫
2021-12-08 / 0 评论 / 136 阅读 / 正在检测是否收录...

IO流的概念


    通过数据流、序列化和文件系统提供系统输入和输出。
 

IO:I =>  Input   输入---将数据源读到内存中;
                 相当于读取硬盘上的文件
        O =>  Output  输出---将内存数据写(保存)到介质(硬盘)里;
                 相当于保存文件。

IO流体系

IO流分:字节流和字符流
        字节流分:输入流和输出流
            inputStream   outputstream

        字符流分:输入流(读流)和输出流(写流)
            reader        writer


File类


    java.io.File类,包含了对文件和文件夹的操作方法,可通过File类对文件或文件夹进行操作(新建、删除、重命名等)。
    File类不能访问文件中的内容,如需要访问文件内容则需要输入/输出流。

构造方法

   a. File(String pathname)
   //创一个新的File实例(即可以是文件也可以是文件夹)
   例: File fi = new File("e:\\text\\a.txt");
        File fi = new File("e:\\text\\t1\\");

  b. File(File parent, String child)
    例:File fi = new File("e:\\text","a.txt");

  c. File(String parent, String child)

  d. File(URI uri)

  parent指定路径(父目录),可以是File类对象也可以是字符串,child中也可以加入路径层级,但要注意,所用的路径必须存在,不存在的路径不会新建。
 

常用方法:
   boolean    isDirectory();        //判断是否是目录
   boolean    isFile();        //判断是否是文件

   File     getAbsolutePath();     //获得文件的绝对路径
   boolean    isHidden();        //判断是否是隐藏文件


   boolean    exists();        //判断所关联的文件或文件夹是否存在

   boolean    createNewFile();     //创建一个新的文件(仅当对象文件不存在时)

   boolean    mkdir();         //创建一个文件夹
   //要用mkdir()创建目录,必须上一级目录存在,即最底层目录前面的目录全都存在

   boolean    mkdirs();         //创建一个文件夹
   //要想把File对象包含的目录一次性全都创建好,可以使用mkdirs()方法。

   boolean    renameTo(File dest);    //重命名文件,为文件或文件夹改名
   例:File fi1 = new File("e:\\a.txt");
       File fi2 = new File("e:\\b.txt");
       fi1.renameTo(fi2);

**********************************************
关于斜杠和反斜杠,只能如下生硬地先记住吧:
\\:右手用两个,比如new File("D:\\abc\\" + "Test.txt");
 /:左手用一个。比如new File("D:/abc/" + "Test.txt");
**********************************************

   boolean    delete();          //删除指定的文件或文件夹
   void        deleteOnExit();      //在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
   boolean    equals(Object obj);    //比较的文件名字相同为true,不同为false


   文件管理:
   String    getName();        //获得文件名或目录名
   String    getParent();         //获得文件的上一级父目录的名字
   File        getParentFile();      //获得文件的上一级父目录的对象

   问:getParent()与getParentFile()的区别?
    getParent()返回此抽象路径名父目录的路径名字符串;
    如果此路径名没有指定父目录,则返回 null。  
    getParentFile()返回此抽象路径名父目录的抽象路径名;
    如果此路径名没有指定父目录,则返回 null。

   long     lastModified();        //获得文件的最后修改时间(毫秒,当前时间与格林时间(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数)
   long     length();        //获得文件大小(长度),以字节为单位

   String[]    list();            //获得指定文件夹下的所有文件的名字
   File[]    listFiles();        //获得文件夹下的所有文件的对象

   //注:即是文件对象,那文件对象还有其他的属性,比如:
    文件名:getName();
    文件路径:getPath();
    文件后缀名:str.substring(str.lastIndexOf(".")+1);
    文件大小:length();
    最后修改时间:lastModified();


   static File  listRoots();
   //获得当前系统的盘符

  
   问:获得系统所有的盘符怎么操作?
       File[] f = File.listRoots();
       for(File ss:f){

       System.out.println(ss.getPath());
       }

-----------------------------------------------------------
将毫秒数转成日期:
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
    //该类用来对日期字符串进行解析和格式化输出
    System.out.println(sdf.format(毫秒数));
 

 

列出一个文件夹下所有子文件夹以及子文件。

    (1)指定文件夹路径;
    (2)判断是否是文件,是文件就打印文件路径(到最底层了);相反如果是目录,则继续;
    (3)获取文件夹下所有文件对象;
    (4)遍历对象数组,执行递归。

   递归写成方法:

 File fs=new File("e:\\");
    public static void prints(File f) {

        if(f.isFile()){ //判断是否是文件
            System.out.println(f.getPath());
        }else if(f.isDirectory()){ //如果是文件夹
             System.out.println(f.getPath());
            if(f.listFiles()!=null) {

                File[] fs=f.listFiles(); //得到下面所有的文件对象
                for(File fa:fs){

                prints(fa);
                }
            }
        }
    }

 

 

 

 


 

0

评论 (0)

取消