Java学习——File类

Posted 没谱的曲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习——File类相关的知识,希望对你有一定的参考价值。

File类

File类的设计主要目的是为了在Java中实现对文件进行增加、删除和访问文件路径等方法,但File类中不具有对文件内部信息进行增删改查的功能。

File类中的方法

研究File类中的方法有助于我们更熟练的掌握File类的使用。

创建File对象

创建File对象有多种方法,但创建出的对象都是同一个
File file = new File(“pathname”);
具体方法如下:

    //创建一个File对象
        File file = new File("a.txt");
        File file1 = new File("./a.txt");
        File file2 = new File("C:/Users/HERUI/IdeaProjects/Week_6/a.txt");

以上三种写法创建的对象都是同一个文件

创建文件

  • 在Flies类中创建文件使用createNewFile()方法
  • 使用createNewFile()方法创建一个文件,若有同名文件则不会创建也不会覆盖
  • 为了避免出现该类异常我们选择使用try-catch来捕获异常,或用throws抛出异常
    创建文件:
		//创建一个File对象
        File file = new File("a.txt");
        //使用createNewFile()方法创建一个文件,若有同名文件则不会创建也不会覆盖,
        // 为避免出现该类异常使用try-catch来捕获异常,或用throws抛出异常
        System.out.println("-----创建文件-----");
        try 
            if (!file.exists()) 
                file.createNewFile();
             else 
                System.out.println("文件已存在");
            
         catch (IOException e) 
            e.printStackTrace();
        

创建文件夹

  • 创建文件夹使用mkdir()方法,具体使用方法类似createNewFile()方法
  • 使用mkdirs()方法可以创建多层嵌套文件夹,需要在创建对象时就将多层嵌套文件夹目录写清楚

创建文件夹:

//使用mkdir()方法创建文件夹
        File file3 = new File("C:/Users/HERUI/IdeaProjects/Week_6/src/B");
        System.out.println("-----创建文件夹-----");
        if (!file3.exists()) 
            System.out.println("文件夹创建完成 " );
            file3.mkdir();
         else 
            System.out.println("文件夹已存在 " );
        

 //使用mkdirs()方法创建多层嵌套文件夹
        File file4 = new File("C:/Users/HERUI/IdeaProjects/Week_6/a/b/c");
        System.out.println("-----创建多层嵌套文件夹-----");
        if (!file4.exists()) 
            file4.mkdirs();
            System.out.println("多层嵌套文件夹创建完成 ");
         else 
            System.out.println("多层嵌套文件夹已存在 ");
        

获取文件名

//通过getName()方法获取文件名字
        System.out.println("-----文件名-----");
        String name = file.getName();
        System.out.println(name);

获取文件长度

//通过length()方法获取文件长度
        System.out.println("-----文件长度-----");
        long length = file.length();
        long length1 = file1.length();
        System.out.println(length);
        System.out.println(length1);

检测文件可读可写性

  • 通过canRead()、canWrite()方法分别检测文件可读性和可写性
  • 方法返回boolean值
//通过canRead()、canWrite()方法检测文件可读写性
        System.out.println("-----可读写性-----");
        boolean read = file.canRead();
        System.out.println("是否可读?" + read);
        boolean write = file.canWrite();
        System.out.println("是否可写?" + write);

检测文件可执行性

  • 通过canExcute()方法检测文件的可执行性
  • 输出boolean值,如果对文件的读取访问被拒绝,则此方法将引发SecurityException
//通过canExcute()方法检测文件的可执行性,输出boolean值,如果对文件的读取访问被拒绝,则此方法将引发SecurityException
        System.out.println("-----文件能否被执行-----");
        boolean excute = file1.canExecute();
        if (excute) 
            System.out.println("Excuteable");
         else 
            System.out.println("Not Excuteable");
        

获取文件路径

File类中有三种获取路径的方式,分别是getPath、getAbsolutePath、getCanonicalPath

比较三种获取路径方式的区别:

  1. getPath:直接返回构造时的参数
  2. getAbsolutePath:返回文件路径+构造时的参数
  3. getCanonicalPath:返回文件的绝对路径

此处我们使用创建文件时创建的file和file1两个文件进行比较三种方法输出的区别:

//创建一个File对象
        File file = new File("a.txt");
        File file1 = new File("./a.txt");

//比较getPath、getAbsolutePath、getCanonicalPath三种获取路径方式的区别
        //getPath:直接返回构造时的参数
        //getAbsolutePath:返回文件路径+构造时的参数
        //getCanonicalPath:返回文件的绝对路径
        System.out.println("-----三种获取路径方式的比较-----");
        System.out.println("getPath1:" + file.getPath());
        System.out.println("getPath2:" + file1.getPath());
        System.out.println("getAbsolutePath1:" + file.getAbsolutePath());
        System.out.println("getAbsolutePath2:" + file1.getAbsolutePath());
        System.out.println("getCanonicalPath1:" + file.getCanonicalPath());
        System.out.println("getCanonicalPath2:" + file1.getCanonicalPath());

输出结果图:

由上图可以看到使用getCanonicalPath方法输出的绝对路径指向的两个对象都是一个文件,但getAbsolutePath方法输出时对象路径后跟的是构造时创建对象写进去的参数,由此可见使用getCanonicalPath方法返回的路径才是文件真正对应的绝对路径

File类中的compareTo()方法

  • compareTo()方法会逐字比较两个对象对应的字符串长度,当比较值不同时输出ASCII码的差值
  • 在File中使用compareTo()方法时,进行比较的是getPath()方法获取到的值
  • 所以即便是同一个文件,只要创建对象时的构造参数不同,compareTo()方法比较的结果也不为0

这里我们同样使用创建文件时创建的三个指向同一个文件不同的对象进行比较:

//创建一个File对象
        File file = new File("a.txt");
        File file1 = new File("./a.txt");
        File file2 = new File("C:/Users/HERUI/IdeaProjects/Week_6/a.txt");

//使用compareTo方法进行比较
System.out.println("-----compareTo()方法比较-----");
        System.out.println(file.compareTo(file));
        System.out.println(file.compareTo(file1));
        System.out.println(file.compareTo(file2));

输出结果:

由上图可知,虽然三个对象指向的都是同一个文件,但是进行比较的是使用getPath()方法获取的内容所以输出结果为getPath()方法进行比较的结果。
如果我们想更准确的确定对象指向的是否是同一个文件,我们需要在比较时使用getCanonicalPath方法,使用对象的绝对路径进行比较
具体如下:

//创建一个File对象
        File file = new File("a.txt");
        File file1 = new File("./a.txt");
        File file2 = new File("C:/Users/HERUI/IdeaProjects/Week_6/a.txt");

//使用compareTo方法进行比较
		System.out.println("-----直接使用compareTo()方法比较-----");
        System.out.println(file.compareTo(file));
        System.out.println(file.compareTo(file1));
        System.out.println(file.compareTo(file2));
        System.out.println("-----使用getCanonicalPath后使用compareTo()方法比较-----");
        System.out.println(file.getCanonicalPath().compareTo(file1.getCanonicalPath()));
        System.out.println(file.getCanonicalPath().compareTo(file2.getCanonicalPath()));

此时的比较结果如下:

由上图可知:因为对象指向的文件路径完全相同,所以使用getCanonicalPath后再使用compareTo方法比较得到的值都为0

删除文件

//删除文件
        file.delete();

更改文件名

使用renameTo()方法可以将文件更名并放到相应的文件路径下
该方法返回一个boolean值,成功修改文件名返回true,若不存在文件则无法修改返回false
具体如下:

//使用renameTo()方法,更改文件名到相应的路径下
        File file5 = new File("x.txt");
        File file6 = new File("y.txt");
        boolean b = file5.renameTo(file6);
        System.out.println(b);

总结:

本文章列出了File类中常用的几个方法,在File类中还有大量的其他方法,大部分使用都较为简单,等待你的发现。

以上是关于Java学习——File类的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记6.3.1 文件操作 - File类

Java学习笔记6.3.1 文件操作 - File类

Java学习笔记36(File类)

Java学习——File类

Java IO学习--File类

Java File类学习 <二>