File

  • 相对路径文件或目录
  • 绝对路径文件或目录
  • File(String pathname) 文件路径或目录
  • File(String parent, String child) 父文件路径, 和子文件名
  • File(File parent, String child) 父文件路径file, 和子文件名
import java.io.File;

public class Demo1_File {
    public static void main(String[] args) {
//        Demo1();
//        Demo2();
        File parentFile = new File("/usr/local/etc/nginx/");
        String child = "nginx.conf";
        File file = new File(parentFile, child);
    }

    private static void Demo2() {
        String parent = "/usr/local/etc/nginx/";
        String child = "nginx.conf";
        File file = new File(parent,child);
        System.out.println(file.exists());
    }
    // a.c 与 src 在同级目录下
    private static void Demo1() {
        File file = new File("/usr/local/etc/nginx/nginx.conf");
        System.out.println(file.exists());
        File file2 = new File("a.c");
        System.out.println(file2.exists());
    }
}

File 的方法

  • boolean createNewFile() throws IOException 如果没有则创建true, 有则不创建false.
  • boolean mkdir() 无则创建文件夹, 有则不创建false
  • boolean mkdirs() 无则创建多级文件夹, 有则不创建false
import java.io.File;
import java.io.IOException;

public class Demo2_FileMethod {
    public static void main(String[] args) throws IOException {
        File file = new File("aaa.c");
        System.out.println(file.createNewFile());

        File file2 = new File("test");
        System.out.println(file2.mkdir());

        File file3 = new File("test/aaa");
        System.out.println(file3.mkdirs());
    }
}
  • boolean renameTo(File dest) 就是mv命令
  • boolean delete() 删除文件或删除空文件夹, 文件夹内有文件或文件夹(空的也算)则删除不了
import java.io.File;
import java.io.IOException;

public class Demo3_FileMethod {
    public static void main(String[] args) throws IOException {
        File file1 = new File("aaa.c");
        File file2 = new File("bbb.c");
        System.out.println(file1.renameTo(file2));
        System.out.println(file2.delete());

        File file3 = new File("test/aaa");
        System.out.println(file3.delete());

        File file4 = new File("test/ccc");
        System.out.println(file4.mkdirs());
        file4.delete();
        File file5 = new File(  "test");
        System.out.println(file5.delete());
    }
}
  • boolean isDirectory() 判断是否文件夹
  • boolean isFile() 判断是否文件
  • boolean exists() 判断是否存在
  • boolean canRead() 判断是否可读权限
  • boolean canWrite() 判断是否可写权限
  • boolean isHidden() 判断是否隐藏
import java.io.File;
import java.io.IOException;

public class Demo4_FileMethod {
    public static void main(String[] args) throws IOException {
        File file1 = new File("test");
        System.out.println(file1.isDirectory());

        File file2 = new File("test.c");
        System.out.println(file1.isFile());
        System.out.println(file2.isFile());

        File file3 = new File("aaa.c");
        System.out.println(file3.exists());
        System.out.println(file3.createNewFile());
        System.out.println(file3.exists());

        File file4 = new File("ccc.c");
        System.out.println(file4.createNewFile());
        System.out.println(file4.canRead());

        File file5 = new File("ddd.c");
        System.out.println(file5.createNewFile());
        System.out.println(file5.canWrite());

        File file6 = new File("root.c");
        System.out.println(file6.setReadable(false));
        System.out.println(file6.canRead());
        System.out.println(file6.canWrite());

        File file7 = new File("test.c");
        System.out.println(file7.isHidden());

        File file8 = new File(".idea");
        System.out.println(file8.isHidden());
    }
}
  • String getAbsolutePath()
  • String getPath()
  • String getName()
  • long length()
  • long lastModified()
  • String[] list()
  • File[] listFiles()
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo5_FileMethod {
    public static void main(String[] args) {
        File file = new File("aaa.c");
        File file2 = new File("/Users/test/IdeaProjects/day19/");
        System.out.println(file.getAbsoluteFile());
        System.out.println(file2.getAbsoluteFile());


        System.out.println(file.getPath());
        System.out.println(file2.getPath());

        System.out.println(file.getName());
        System.out.println(file2.getName());

        System.out.println(file.length());
        System.out.println(file2.length());

        System.out.println(file.lastModified());
        System.out.println(file2.lastModified());
        Date date = new Date(file.lastModified());
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));


        String [] arr = file.list();
//        for(String s: arr){
//            System.out.println(s);
//        }
        String [] arr2 = file2.list();
        for(String s: arr2){
            System.out.println(s);
        }

        File[] list1 = file.listFiles();
//        for(File f : list1){
//            System.out.println(f);
//        }
        File[] list2 = file2.listFiles();
        for(File f : list2){
            System.out.println(f);
        }
    }
}

练习 查找文件夹下所有的.c结尾的文件

  • 遍历所有的文件, 碰到文件夹则进入遍历
  • 文件名字正则匹配, 匹配输出
  • 或使用String endsWith 匹配
import java.io.File;

public class Demo6_FileTest {
    public static void main(String[] args) {
        File file = new File("/Users/test/workplace/test");
        File file2 = new File("/Users/test/workplace/test");
        File[] arrFile = file.listFiles();
        File[] arrFile2 = file2.listFiles();
        String regex = ".*[\\.][c]$";
        String strEnd = ".c";
        fileFind(arrFile, strEnd);
        fileFindRegex(arrFile2, regex);

    }
    public static void fileFind(File[] file, String strEnd){
        for(File f : file){
            if(f.isDirectory()){
                fileFind(f.listFiles(), strEnd);
            } else{
                if( f.getName().endsWith(strEnd) ){
                    System.out.println(f.getName());
                }
            }
        }
        return ;
    }
    public static void fileFindRegex(File[] file, String regex){
        for(File f : file){
            if(f.isDirectory()){
                fileFindRegex(f.listFiles(), regex);
            } else{
                if( f.getName().matches(regex) ){
                    System.out.println(f.getName());
                }
            }
        }
        return ;
    }
}

String[] list(FilenameFilter filter) 实现FilenameFilter 接口, 返回匹配的数组

原码

public String[] list(FilenameFilter filter) {
    String names[] = list();
    if ((names == null) || (filter == null)) {
        return names;
    }
    List<String> v = new ArrayList<>();
    for (int i = 0 ; i < names.length ; i++) {
        if (filter.accept(this, names[i])) {
            v.add(names[i]);
        }
    }
    return v.toArray(new String[v.size()]);
}

练习, test下.c结尾的文件, 仅有一级目录

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

public class Demo7_FileMethod {
    public static void main(String[] args) {
        File dir = new File("/Users/test/workplace/test");
        String [] arr = dir.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                File file = new File(dir, name);
                return file.isFile() && file.getName().endsWith(".c");
            }
        });

        for (String str : arr){
            System.out.println(dir+"/" + str);
        }
    }
}