zoukankan      html  css  js  c++  java
  • Java IO流详解(二)——File类

         在上一章博客中简单的介绍了Java IO流的一些特征。也就是对文件的输入输出,既然至始至终都离不开文件,所以Java IO流的使用得从File这个类讲起。

         File类的描述:File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作。即Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件或者目录只要创建File这个类即可。

        不过要注意的是File类只是对文件的操作类,只能对文件本身进行操作,不能对文件内容进行操作。


    1、File类的属性(字段)

    image

        从上图的API可以发现File中包括两种分隔符,路径分隔符和名称分隔符,而且分别还有两种形式Char型和String型。其中

        File.pathSeparator 指的是分隔连续多个路径字符串的分隔符。在UNIX系统上,这个字符是’:’ ; 在Microsoft Windows系统上是’;’

        File.separator 指的是用来分隔同一个路径字符串中的目录的分隔符。在UNIX系统上,该字段的值为’/’; 在Microsoft Windows系统上是’’

        我们都知道由于不同的操作系统之间会导致分隔符的不同,所以使用它们的作用主要就是屏蔽各个平台之间的分隔符差异。

        //在Windows系统下输出
        System.out.println(File.pathSeparator);// 输出;
    
        System.out.println(File.separator);// 输出


        //简单测试一下,调用的方法后面会讲
        File file1 = new File("D:\IO\hello.txt");//这里两个\是Java中的转义字符
        File file2 = new File("D:"+File.separator+"IO"+File.separator+"hello.txt");
        System.out.println(file1.getAbsolutePath());
        System.out.println(file2.getAbsolutePath());

        输出的结果都是:D:IOhello.txt


    2、File类的构造方法

    image

       上图的构造方法使用举例如下:

    package com.thr;
    
    import java.io.File;
    
    /**
     * @author Administrator
     * @date 2020-02-20
     * @desc File构造方法举例
     */
    public class Demo {
        public static void main(String[] args) {
    
            //File(String parent, String child)
            //从父路径名字符串和子路径名字符串创建新的File实例。
            File f1 = new File("D:","IO\hello.txt");
            System.out.println(f1); //输出 D:IOhello.txt
    
            //File(String pathname)
            //通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
            //不用Java分隔符
            File f2=new File("D:\IO\hello.txt");
            //使用Java分隔符
            File f3 = new File("D:"+File.separator+"IO"+File.separator+"hello.txt");
            System.out.println(f2); //输出 D:IOhello.txt
            System.out.println(f3); //输出 D:IOhello.txt
    
            //File(File parent, String child)
            //从父抽象路径名和子路径名字符串创建新的 File实例。
            File f4 = new File("D:");
            File f5 = new File(f4,"IO\hello.txt");
            System.out.println(f5); //输出 D:IOhello.txt
        }
    }
    


    3、File类的常用方法


       ①.获取文件的相关信息:

    • String getAbsolutePath() :获取绝对路径名字符串。
    • String getName():获取文件或目录的名称。
    • String getPath():获取路径名字符串。
    • String getParent() :获取路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
    • Long lastModified():获取最后一次修改的时间(返回毫秒)。
    • Long length():获取文件的长度,如果表示目录则返回值未指定。

       以上方法测试的代码如下【测试以自己的电脑文件夹为准】:

    package com.thr;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * @author Administrator
     * @date 2020-02-20
     * @desc File常用方法举例
     */
    public class Demo1 {
        public static void main(String[] args) {
    
            //路径带文件
            File f1 = new File("D:\IO\hello.txt");
            System.out.println("文件绝对路径:"+f1.getAbsolutePath());
            System.out.println("文件名称:"+f1.getName());
            System.out.println("文件路径(字符串):"+f1.getPath());
            System.out.println("文件父路径:"+f1.getParent());
            System.out.println("文件最后修改时间(ms):"+f1.lastModified());
            System.out.println("文件长度:"+f1.length());
            System.out.println("------------");
            //路径不带文件,纯目录
            File f2 = new File("D:\IO");
            System.out.println("目录绝对路径:"+f2.getAbsolutePath());
            System.out.println("目录名称:"+f2.getName());
            System.out.println("目录路径(字符串):"+f2.getPath());
            System.out.println("目录父路径:"+f2.getParent());
            System.out.println("目录最后修改时间(ms):"+f2.lastModified());
            System.out.println("目录长度:"+f2.length());
        }
    }
    运行结果:
    文件绝对路径:D:IOhello.txt
    文件名称:hello.txt
    文件路径(字符串):D:IOhello.txt
    文件父路径:D:IO
    文件最后修改时间(ms):1582207195168
    文件长度:9
    ------------
    目录绝对路径:D:IO
    目录名称:IO
    目录路径(字符串):D:IO
    目录父路径:D:
    目录最后修改时间(ms):1582206503515
    目录长度:0


       注意:绝对路径和相对路径的区别

       绝对路径:是一个完整的路径,以盘符开头,例如 D://IO//hello.txt。
       相对路径:是相较于当前路径,不以盘符开头,例如 //hello.txt。


       ②、判断功能

    • Boolean isDirectory():判断此路径是否为一个目录
    • Boolean isFile():判断是否为一个文件
    • Boolean exists():判断文件或目录是否存在
    • Boolean canExecute():判断文件是否可执行
    • Boolean canRead():判断文件是否可读
    • Boolean canWrite():判断文件是否可写
    • Boolean isHidden():判断是否为隐藏文件

       以上方法测试的代码如下:

    package com.thr;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * @author Administrator
     * @date 2020-02-20
     * @desc File常用方法举例
     */
    public class Demo2 {
        public static void main(String[] args) throws IOException {
    
            File f1 = new File("D:\IO\hello.txt");
            //路径带文件
            System.out.println("是否为目录:"+f1.isDirectory());
            System.out.println("是否为文件"+f1.isFile());
            System.out.println("是否存在"+f1.exists());
            System.out.println("是否可执行"+f1.canExecute());
            System.out.println("是否可读"+f1.canRead());
            System.out.println("是否可写"+f1.canWrite());
            System.out.println("是否隐藏"+f1.isHidden());
            System.out.println("------------");
            File f2 = new File("D:\IO");
            //路径不带文件,纯目录
            System.out.println("是否为目录:"+f2.isDirectory());
            System.out.println("是否为文件"+f2.isFile());
            System.out.println("是否存在"+f2.exists());
            System.out.println("是否可执行"+f2.canExecute());
            System.out.println("是否可读"+f2.canRead());
            System.out.println("是否可写"+f2.canWrite());
            System.out.println("是否隐藏"+f2.isHidden());
        }
    }
    


       ③、新建和删除

    • Boolean createNewFile():创建文件,如果文件存在则不创建,返回false,反之返回true。
    • Boolean mkdir():创建文件目录。如果此文件目录存在则不创建,如果此文件目录的上层目录不存在也不创建。
    • Boolean mkdirs(): 创建文件目录。如果上层文件目录不存在也会创建。
    • Boolean delete():删除的文件或目录。如果目录下有文件或目录则不会删除。

         以上方法测试的代码如下:

    package com.thr;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * @author Administrator
     * @date 2020-02-20
     * @desc File常用方法举例
     */
    public class Demo3 {
        public static void main(String[] args) throws IOException {
    
            //创建文件
            File f1 = new File("D:\IO\hi.txt");
            if (!f1.exists()) {
                f1.createNewFile();
                System.out.println("创建成功...");
            }else{
                System.out.println("创建失败...");
            }
    
            //mkdir创建文件目录,目标目录不存在,上层目录存在
            File f2 = new File("D:\IO\IO1");
            boolean mkdir = f2.mkdir();
            if (mkdir){
                System.out.println("创建目录成功...");
            }else{
                System.out.println("创建目录失败...");
            }
    
            //mkdirs创建文件目录,上层目录不存在存在
            File f3 = new File("D:\IO1\IO1");
            boolean mkdirs = f3.mkdirs();
            if (mkdirs){
                System.out.println("创建目录成功...");
            }else{
                System.out.println("创建目录失败...");
            }
    
            //删除文件或目录
    /*      boolean delete = f1.delete();
            System.out.println(delete);
            boolean delete1 = f2.delete();
            System.out.println(delete1);
            boolean delete2 = f3.delete();
            System.out.println(delete2);*/
        }
    }
    


    ④、文件的获取:
    • String[] list():返回一个字符串数组,获取指定目录下的所有文件或者目录名称的数组。
    • File[] listFiles():返回一个抽象路径名数组,获取指定目录下的所有文件或者目录的File数组。

       以上方法测试的代码如下:为了方便测试我在IO目录下添加了其他目录。

    package com.thr;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * @author Administrator
     * @date 2020-02-20
     * @desc File常用方法举例
     */
    public class Demo4 {
        public static void main(String[] args) {
    
            File file = new File("D:\IO");
    
            //list()方法
            String[] list = file.list();
            for (String s : list) {
                System.out.println(s);
            }
            System.out.println("----------");
            //listFiles()方法
            File[] files = file.listFiles();
            for (File f : files) {
                System.out.println(f.toString());
            }
        }
    }
    运行结果:
    hello.txt
    hi.txt
    IO1
    IO2
    IO3
    IO4
    IO5
    IO6
    ----------
    D:IOhello.txt
    D:IOhi.txt
    D:IOIO1
    D:IOIO2
    D:IOIO3
    D:IOIO4
    D:IOIO5
    D:IOIO6
    


    ⑤、重命名文件:
    • Boolean renameTo(File dest):把文件重命名到指定路径。

    注意:要使用这个方法其原文件(即TXT文件或其它文件)一定要存在,而且指定路径不能存在与重命名名字相同的文件,否则永远返回false。

    package com.thr;
    
    import java.io.File;
    
    /**
     * @author Administrator
     * @date 2020-02-20
     * @desc renameTo方法测试
     */
    public class Demo5 {
        public static void main(String[] args) {
    
            File file1 = new File("D:\IO\hello.txt");
            File file2 = new File("D:\test\hi.txt");
            boolean renameTo = file1.renameTo(file2);
            System.out.println(renameTo);
        }
    }
    


  • 相关阅读:
    bzoj1007: [HNOI2008]水平可见直线(单调栈)
    1264: [AHOI2006]基因匹配Match(动态规划神题)
    bzoj1433: [ZJOI2009]假期的宿舍(最大二分图匹配)
    bzoj3931: [CQOI2015]网络吞吐量(spfa+网络流)
    [ZJOI2007]矩阵游戏
    [HAOI2007]覆盖问题
    [ZJOI2008]树的统计
    [ZJOI2010]数字计数
    [HAOI2006]旅行
    [HAOI2006]数字序列
  • 原文地址:https://www.cnblogs.com/tanghaorong/p/12332301.html
Copyright © 2011-2022 走看看