JAVA File类详解一

首先先来了解一下如何在JAVA当中创建一个新的文件,这里用到了java.io.File包,其提供了三个常用的构造方法
// 构造方法一:直接给出文件的绝对路径

public File(String pathname)
 /**


通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。 如果给定的字符串是空字符串,则结果是空的抽象路径名。

参数
 pathname - 路径名字符串
 异常
 NullPointerException - 如果 pathname参数是 null
 */// 构造方法二:给出父目录+子路径
 public File(String parent,String child)
 /**


从父路径名字符串和子路径名字符串创建新的File实例。
如果parent是null则创建新的File实例,就像在给定的child路径名字符串上调用单参数File构造函数一样。
否则,将使用parent路径名字符串来表示目录,并将child路径名字符串用于表示目录或文件。如果child路径名字符串是绝对的,
那么它将以系统相关的方式转换为相对路径名。 如果parent是空字符串,则通过将child转换为抽象路径名并根据系统相关的默认
目录解析结果来创建新的File实例。 否则,每个路径名字符串将转换为抽象路径名,并且子抽象路径名将针对父对象进行解析。
参数

parent - 父路径名字符串
 child - 子路径名字符串
 异常
 NullPointerException - 如果 child是 null
 */// 构造方法三:根据父目录文件+子路径构建
 public File(File parent, String child)
 /**


从父抽象路径名和子路径名字符串创建新的File实例。
如果parent是null则创建新的File实例,就像在给定的child路径名字符串上调用单参数File构造函数一样。
否则,采用parent抽象路径名来表示目录,并将child路径名字符串用于表示目录或文件。 如果child路径名字符串是绝对的,
那么它将以系统相关的方式转换为相对路径名。 如果parent是空的抽象路径名,那么新的File实例是通过将child转换为抽象路径名
并根据系统相关的默认目录解析结果来创建的。 否则,每个路径名字符串将转换为抽象路径名,并且子抽象路径名将针对父对象进行解析。
参数

parent - 父抽象路径名
 child - 子路径名字符串
 异常
 NullPointerException - 如果 child是 null
 */


接下来演示一下File创建文件的案例

package com.java.practice;

import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;

public class practice01 {
    public static void main(String[] args) {

    }

    // 此处调用了@Test方法,可以直接进行执行,无需在main函数中实例化
    @Test
    public void test01() throws IOException {
        // 给定文件绝对路径
        String filePath01 = "D:\\test01.txt";
        // 通过构造方法创建一个File的对象
        File file01 = new File(filePath01);
        // 创建对象之后必须通过createNewFile()方法才能创建成功,此处返回一个bool类型的数据
        // 另外,会存在一个异常,可以选择try...catch...语句进行捕获或者直接将异常进行抛出即可
        boolean newFile = file01.createNewFile();
        System.out.println("test01.txt创建成功。。。");
    }

    @Test
    public void test02() throws IOException {
        // 给定文件绝对路径
        String parentFile = "D:\\";
        String filePath02 = "test02.txt";
        // 通过构造方法创建一个File的对象
        File file02 = new File(parentFile,filePath02);
        // 创建对象之后必须通过createNewFile()方法才能创建成功
        boolean newFile = file02.createNewFile();
        System.out.println("test02.txt创建成功。。。");
    }

    @Test
    public void test03() throws IOException {
        // 给定文件绝对路径
        String parentFile = "D:\\";
        String filePath02 = "test03.txt";
        // 通过构造方法创建一个父路径的File对象
        File parentFilePath = new File(parentFile);
        File file03 = new File(parentFilePath,filePath02);
        // 创建对象之后必须通过createNewFile()方法才能创建成功
        boolean newFile = file03.createNewFile();
        System.out.println("test03.txt创建成功。。。");
    }

    /**
     * 以上为File正常创建文件的过程,在创建当中我们也许会遇到父路径为null这种情况
     * 下面来演示这种情况,防止以后碰到的时候不熟悉
     * 注:以下均为存在null下的正确情况
     */
    @Test
    public void test02_2() throws IOException {
        // 给定文件绝对路径
        String parentFilePath = null;//给定一个空字符串作为父路径
        String filePath02 = "D:\\test02_2.txt";
        // 通过构造方法创建一个File的对象
        // 如果parent是null则创建新的File实例,就像在给定的child路径名字符串上调用单参数File构造函数一样
        File file02 = new File(parentFilePath,filePath02);
        // 创建对象之后必须通过createNewFile()方法才能创建成功
        boolean newFile = file02.createNewFile();
        System.out.println("test02_2.txt创建成功。。。");
    }

    @Test
    public void test03_2() throws IOException {
        // 给定文件绝对路径
        String filePath03 = "D:\\test03_2.txt";
        // 通过构造方法创建一个File的对象
        // 如果parent是null则创建新的File实例,就像在给定的child路径名字符串上调用单参数File构造函数一样
        File file03 = new File((File) null,filePath03);
        // 创建对象之后必须通过createNewFile()方法才能创建成功
        boolean newFile = file03.createNewFile();
        System.out.println("test03_2.txt创建成功。。。");
    }
}

学完创建文件的基本方法之后,我们来研究一下File提供给我们的方法,首先IDEA提供了一个diagram功能,可以生成File对应的类图及其类的方法,可以看出,File继承了Serializble接口,意味着他与他的子类有序列化的功能,这个后面再讲,File提供了一大堆的方法,在这里选择比较主要的几个方法进行详细叙述。

java string写出文件 java file string_java string写出文件

public boolean createNewFile() throws IOException
/**
当且仅当具有该名称的文件尚不存在时,原地创建一个由该抽象路径名命名的新的空文件。

结果:
true如果命名文件不存在并被成功创建; false如果命名文件已经存在
*/

public boolean delete()
/**
删除由此抽象路径名表示的文件或目录。 如果此路径名表示目录,则目录必须为空才能删除。 
请注意, Files类定义了一个delete方法,当一个文件不能被删除时,它会抛出一个IOException。这对于错误报告和诊断文件无法被删除的原因很有用。 
结果 
true当且仅当文件或目录被成功删除时; false则表示未删除成功
*/

public String[] list()
/**
返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 
如果此抽象路径名不表示目录,则此方法返回null。否则返回一个字符串数组,包含该目录下的子目录和文件。
*/

public File[] listFiles()
/**
返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。 
如果此抽象路径名不表示目录,则此方法返回null。否则将返回一个File对象的数组,包含该目录下的子目录和文件。
*/

public boolean mkdir()
/**
创建由此抽象路径名命名的目录。 
结果
true当且仅当该目录被创建时; false则未创建成功。
*/

public boolean mkdirs()
/**
递归创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。注意,如果此操作失败,它可能已成功创建一些必需的父目录。 
结果 
true当且仅当该目录已创建,以及所有必需的父目录; false则表示未创建成功
*/

public String getName() // 返回由此抽象路径名表示的文件或目录的名称。
public String getParent() // 返回此抽象路径名的父null的路径名字符串,如果此路径名未命名为父目录,则返回null。
public boolean exists() // 测试此抽象路径名表示的文件或目录是否存在。
public boolean isDirectory() // 测试此抽象路径名表示的文件是否为目录。
public boolean isFile() // 测试此抽象路径名表示的文件是否为普通文件。
public long length() // 返回由此抽象路径名表示的文件的长度。

对以上方法进行案例演示

package com.java.practice;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;


public class practice02 {
    public static void main(String[] args) throws IOException {
        // 给定文件绝对路径
        String parentFile = "D:\\";// 父目录
        String packageFile = "D:\\测试\\"; // 通过方法在D盘下创建测试单层文件夹
        String packageFile01 = "D:\\测试\\递归a\\递归b\\递归c\\";// 通过方法在D盘下的测试文件夹递归创建文件夹
        String filePath02 = "test_method.txt";// 文件的子路径
        String filePath03 = "D:\\test_method.txt";// 文件的绝对路径
        // 通过构造方法创建一个父路径的File对象
        File parentFilePath = new File(parentFile);
        File file03 = new File(parentFilePath,filePath02);
        File filePath = new File(filePath03);
        File packageFileTest = new File(packageFile);// 单层创建对应的对象
        File packageFile01Test = new File(packageFile01);// 递归创建对应的对象
        // 创建对象之后必须通过createNewFile()方法才能创建成功
        // createNewFile() 创建文件
        boolean newFile = file03.createNewFile();
        System.out.println("test_method.txt创建成功。。。");

        // list()列出当前目录下的子目录和文件,仅显示文件或者子目录名称,并不是绝对路径
        String[] list = parentFilePath.list();
        System.out.println(Arrays.toString(list));

        // 若对文件使用list()方法,会直接返回null
        String[] list01 = filePath.list();
        System.out.println(Arrays.toString(list01));

        // listFiles 返回文件或子目录的绝对路径
        // 若对文件使用listFiles()方法,会直接返回null
        File[] files = parentFilePath.listFiles();
        // toString()方法进行转写
        System.out.println(Arrays.toString(files));

        // 使用了exists方法确认该文件夹不存在,使用mkdir进行文件夹的非递归创建
        if (packageFileTest.exists()){
            System.out.println("当前文件夹已存在,请检查后再试");
        }else{
            boolean mkdir = packageFileTest.mkdir();
            System.out.println("文件创建成功");
        }

        // mkdirs递归创建文件夹
        if (packageFile01Test.exists()){
            System.out.println("递归创建失败");
        }else{
            boolean mkdirs = packageFile01Test.mkdirs();
            System.out.println("递归创建成功");
        }

        System.out.println("文件名:"+file03.getName());
        System.out.println("父目录名称:"+file03.getParent());
        System.out.println("file03是文件夹吗?"+file03.isDirectory());
        System.out.println("file03是文件吗?"+file03.isFile());
        System.out.println("file03的文件大小:"+file03.length());

        System.out.println(file03.delete());
    }
}

至此,File类的基本使用到此结束。接下来会继续探讨File类的子类。