java讲义阅读学习File类
前言: 临近开学,面临考研学习等诸多的压力,通过java讲义图书,重新学习java io流中核心的知识形成自己的体系。从更深的层次上来说,以后学习的时间日益的缩减和紧张。通过读书学习的方式更能够培养自学的能力,拜托对教程的过渡依赖。在下学期中也可以更好地提高学习的效率。提高总结能力吧。
File类
File介绍
File类是java.io包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成。值得指出的是,不管是文件还是目录都是使用File来操作的,File能新建、删除、重命名文件和目录,File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。

通过源码结构图的分析可以得知File类中没有默认的构造方法,必须通过URL指定File所创建的文件目录。
File类可以使用文件路径字符串来创建File实例,该文件路径字符串既可以是绝对路径,也可以是相对路径。在默认情况下,系统总是依据用户的工作路径来解释相对路径。
一旦创建了File对象后,就可以调用File对象的方法来访问,File类提供了很多方法来操作文件和目录,下面列出一些比较常用的方法。
访问文件名相关的方法
一般工程上把pojo的get/set方法后面部分名称称为property,实例变量叫attribute
Java类里的变量都可以叫field

 下面是源码上面字段的对应部分。
 
 
 
 
 下面介绍的是访问文件对应的方法
-  
String getName():返回此File对象所表示的文件名或路径名(如果是路径,则返回最后一级子路径名)
 -  
String getPath():返回此File对象所对应的路径名。
 -  
File getAbsoluteFile():返回此File对象所对应的绝对路径所对应的File对象。
 -  
String getAbsolutePath():返回此File对象所对应的绝对路径名。
 -  
String getParent():返回此File对象所对应目录(最后一级子目录)的父目录名。
 -  
boolean renameTo(File newName):重命名此File对象所对应的文件或目录,如果重命名成功,则返回true;否则返回false。
 

这些访问文件相关的方法,在File类的源码中都有对应。如上图所示。

文件检测相关的方法
- boolean exists():判断File对象所对应的文件或目录是否存在。
 - boolean canWrite():判断File对象所对应的文件和目录是否可写。
 - boolean canRead():判断File对象所对应的文件和目录是否可读。
 - boolean isFile():判断File对象所对应的是否是文件,而不是目录。
 - boolean isDirectory():判断File对象所对应的是否是目录,而不是文件。
 - boolean isAbsolute():判断File对象所对应的文件或目录是否是绝对路径。
 
总结:文件检测的相关的方法总结为:判断文件存在,判断文件是否可读写,判断文件的类型
 
上图中的方法对应了文件检测中常用的一些方法。
文件操作相关的方法
- boolean createNewFile():当此File对象所对应的文件不存在时,该方法将新建一个该File对象所指定的新文件,如果创建成功则返回true;否则返回false。
 - boolean delete():删除File对象所对应的文件或路径。
 - static File createTempFile(String prefix, String
suffix):在默认的临时文件目录中创建一个临时的空文件,使用给定前缀、系统生成的随机数和给定后缀作为文件名。这是一个静态方法,可以直接通过File类来调用。prefix参数必须至少是3个字节长。建议前缀使用一个短的、有意义的字符串,比如"hjb"或"mail"。suffix参数可以为null,在这种情况下,将使用默认的后缀“.tmp”。 
文件相关的操作方法主要涉及到了文件的创建与删除,可以和目录的相关方法对应学习
目录操作相关的方法
-  
boolean
mkdir():试图创建一个File对象所对应的目录,如果创建成功,则返回true;否则返回false。调用该方法时File对象必须对应一个路径,而不是一个文件。 -  
String[] list():列出File对象的所有子文件名和路径名,返回String数组。
 -  
File[] listFiles():列出File对象的所有子文件和路径,返回File数组。
 -  
static File[] listRoots():列出系统所有的根路径。这是一个静态方法,可以直接通过File类来调用

这些所写过的方法属于File类中的常用方法。 
File类的实际操作
实例一:以当前的路径创建一个File对象并获取文件信息
package com.dzu.cn;
import java.io.File;
import java.io.IOException;
/**
 * @Author ChenRuXu
 * @Date 2022/2/21 20:47
 * @Version 1.0
 */
public class TestFile {
    public static void main(String[] args) throws IOException {
        File file = new File("file");
        System.out.println(file.getName());
        //获取绝对路径
        System.out.println(file.getAbsolutePath());
        //获取相对路径的父路径
        System.out.println(file.getParent());
        //获取上一级路径
        System.out.println(file.getAbsoluteFile().getParent());
    }
}
 
实例二:创建文件
方式一:根据文件路径来创建文件
package com.dzu.cn;
import java.io.File;
import java.io.IOException;
/**
 * @Author ChenRuXu
 * @Date 2022/2/22 17:34
 * @Version 1.0
 */
public class CreateFile {
    public static void main(String[] args) {
        CreateFile createFile = new CreateFile();
        createFile.create01();
    }
    //根据文件的路径创建文件一
    public void create01(){
        String filePath ="e:\\news1.txt";
        File file = new File(filePath);
        try {
            file.createNewFile();
            System.out.println("文件创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 

 方式二:父文件加子路径构建File
//根据父文件加子路径构建File(File partent,String child)
    public void create02()  {
        //父文件内存中保存
        File partentFile = new File("e:\\");
        String filename = "news2.txt";
        File file = new File(partentFile,filename);
        try {
            file.createNewFile();
            System.out.println("创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 

 方式三:父路径加子路径创建
//创建方式三
    public void create03(){
        String partentpath = "e:\\";
        String fileName = "news3.txt";
        File file = new File(partentpath,fileName);
        try {
            file.createNewFile();
            System.out.println("创建文件3成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 

 根据三种创建文件的方式对应了File类中的三个构造器。
 
实例三:获取文件的相关信息
package com.dzu.cn;
import java.io.File;
/**
 * 获取文件信息
 * @Author ChenRuXu
 * @Date 2022/2/22 18:18
 * @Version 1.0
 */
public class FileInformation {
    public static void main(String[] args) {
        //创建文件对象
        File file = new File("e:\\news1.txt");
        //调用相关的方法获取文件信息(文件名)
        System.out.println(file.getName());
        //获取文件父目录
        System.out.println(file.getParent());
        //获取文件大小按照字节(一个汉字三个字节)
        System.out.println(file.length());
        //判断文件是否存在
        System.out.println(file.exists());
        //判断是否是一个文件呢
        System.out.println(file.isFile());
        //判断文件是否是一个目录
        System.out.println(file.isDirectory());
        
    }
}
 
实例四:目录相关操作
创建一级目录,创建多级目录,删除目录
操作一:判断文件是否存在存在则删除
package com.dzu.cn;
import java.io.File;
/**
 * 目录相关操作
 * @Author ChenRuXu
 * @Date 2022/2/22 18:34
 * @Version 1.0
 */
public class Directory {
    public static void main(String[] args) {
        Directory directory = new Directory();
        directory.m1();
    }
    /**
     * 删除文件
     */
    public void m1(){
        String filepath = "e:\\news1.txt";
        File file = new File(filepath);
        if (file.exists()){
            if (file.delete()){
                System.out.println("文件删除成功");
            }else {
                System.out.println("文件删除失败");
            }
        }else {
            System.out.println("文件不存在");
        }
    }
}
 

 操作二:在D盘下新建一个demo的文件夹目录,在该目录的下面随意健几个文件进行测试
经过测试可以发现文件中存在其他的东西时删除会失败,里面为空则会删除成功
 
/**
     * 删除文件夹
     */
    public void m2(){
        String filepath ="d:\\demo";
        File file = new File(filepath);
        if (file.exists()){
            if (file.delete()){
                System.out.println("文件夹删除成功");
            }else {
                System.out.println("文件夹删除失败");
            }
        }else {
            System.out.println("文件夹不存在");
        }
    }
 
操作三:创建多级目录mkdirs()

public void m3(){
        String filepath ="d:\\demo\\aa\\bb";
        File file = new File(filepath);
        if (file.exists()){
            System.out.println("文件存在");
        }else {
            if (file.mkdirs()){
                System.out.println("多级目录创建成功");
            }else {
                System.out.println("多级目录创建失败");
            }
        }
    }
 










