Java File类

JAVA中的File类可以用在创建文件、目录;修改文件、目录名称;删除文件、目录;查询目录下的文件。好家伙,增删改查齐活了。但是如果你想往某个文件中写入数据,File类表示无能为力。

在File类中,有个关键词叫做抽象路径名
File类有三个构造方法(public),分别是

public File(String pathname)

public File(String parent, String child)

public File(URI uri)

上面说的抽象路径名就是指构造方法中的参数?抽象路径名代表文件或者目录,pathname,parent,child为抽象文件名
使用构造方法创建一个File对象

File file = new File("HellWorld.java");

这只是创建了一个File对象,并没有创建一个名为HelloWorld.java的文件
接着如果要创建文件

        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

这时在和源文件同一级目录下新建了一个HelloWorld.java的文件

如果创建文件夹

file.mkdir();

这时就会创建一个HelloWorld.java的文件夹

如何在指定目录下创建文件、目录?
需要使用public File(String parent, String child)创建File对象
创建文件

        //注意这里有两个'\',其中一个是转义字符
        File file = new File("E:\\","Test.txt");
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

创建文件夹

File file = new File("E:\\","Test.txt");
file.mkdir();

注意windows中文件、目录名是不区分大小写的,如果有和抽象路径名相同的文件或目录存在,是不能创建的

File对象中常用的方法:
createNewFile() 创建新文件
mkdir() 创建文件夹
delete() 删除文件、目录(只能删除空文件夹)
renameTo(File file2) 重命名文件、目录(如果file2和原文件路径不一致,那么原文件将被移动到file2指定的目录并重命名)
list() 查询目录下的子目录和文件名,返回String[]
listFile() 查询目录下的子目录和文件名,返回File

list()设置过滤和listFile设置过滤

import java.io.File;
import java.io.FilenameFilter;

public class Test {
    public static void main(String args[]){
        File file = new File("E:\\");
        MyFilenameFilter myFilenameFilter = new MyFilenameFilter();
        myFilenameFilter.setSuffix(".txt");
        String[] names = file.list(myFilenameFilter);
        for(String name : names){
            System.out.println(name);
        }
    }
}
class MyFilenameFilter implements FilenameFilter {
    private String suffix;
    public void setSuffix(String suffix){
        this.suffix = suffix;
    }
    @Override
    //每次检查到dir目录中的一个文件或目录就调用一次accept方法,这里的dir不是检查的的File对象而是调用MyFilenameFileter方法的File对象,name为目录或文件名,也可以叫抽象路径名。
    public boolean accept(File dir, String name) {
        return name.endsWith(suffix) && new File(dir,name).isFile();
    }
}

注意:list()方法返回的是String[],listFile()返回的是File[];有两种过滤接口FileFilter和FilenameFilter,FileFilter中方法为boolean accept(File pathname),FilenameFilter中的方法为boolean accept(File dir, String name)

删除非空文件夹

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;

public class Test {
    public static void main(String args[]){
        File file = new File("E:\\","123");
        //方法一,使用自己写的dfsdelete删除文件夹
        dfsdelete(file);
        //方法二,使用org.apache.commons.io.FileUtils类提供的方法deleteDirectory删除文件夹
        try {
            FileUtils.deleteDirectory(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void dfsdelete(File file){
        if(file.delete() == false){
            File[] files = file.listFiles();
            for(File f : files){
                if(f.delete() == false){
                    dfsdelete(f);
                }
            }
            file.delete();
        }
    }
}

获得文件后缀

        File file = new File("E:\\","test12345.txt");
        //"\\"是转义字符串
        String[] name = file.getName().split("\\.");
        String suffix = name[name.length-1];
        System.out.println("suffix is: "+suffix);

修改文件、目录名

        File file = new File("E:\\","test12345.t.txt");
        file.renameTo(new File("E:\\","lalala"));

修改文件后缀
这不是和上面的一样?

        File file = new File("E:\\","lalala.txt");
        String name = file.getName();

        if(file.isFile()){
            int tail = name.length();
            int a = tail-1;
            while(name.charAt(a) != '.'){
                a--;
            }
            name = name.replace(name.substring(++a,tail),"java");
            System.out.println(name);
        }

        file.renameTo(new File("E:\\",name));
posted on 2021-12-10 18:10  小白成长变大神  阅读(54)  评论(0编辑  收藏  举报