java基础入门

File类总结

2019-03-05  本文已影响13人  阿Q说代码

最近一直在忙项目,所以没有及时更新小知识,今天就为大家讲一下file的知识点。首先呢,我们需要了解文件路径的概念。文件路径就是文件在电脑中的位置,表示文件路径的方式有两种:相对路径和绝对路径。相对路径是指目标相对于当前文件的路径,例如:“./index.html”。绝对路径:从盘符开始的路径或者网址的全路径,例如“C:\windows\system32\cmd.exe”或者“https://blog.csdn.net/Qingai521”。

相对路径表示的方法:

File构造方法

注意:File没有无参构造方法, 因为创建一个File对象必须要指向某个路径才行,而这个路径就是调用有参构造方法传入的。

File(String pathname):根据一个路径得到File对象。

File(String parent, String child):根据一个目录和一个子文件/目录得到File对象

File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

代码演示:

public static void demo1() {
    File file = new File("F:\\double\\video\\today.avi");//绝对路径
    System.out.println(file.exists());  

    File file2 = new File("xxx.txt");   //相对路径 相对于项目而言
    System.out.println(file2.exists());

    File file3 = new File("yyy.txt");   //相对路径 相对于项目而言
    System.out.println(file3.exists());
}

public static void demo2() {
    String parent = "F:\\double\\video";
    String child = "today.avi";
    File file = new File(parent,child);
    System.out.println(file.exists());
}
        
public static void main(String[] args) {
    File parent = new File("F:\\double\\video");
    String child = "today.avi";
    File file = new File(parent, child);
    System.out.println(file.exists());
    System.out.println(parent.exists());
}
File创建功能

public boolean createNewFile():创建文件,如果存在这样的文件,就不创建了;

public boolean mkdir()//只会建立一级的文件夹;

public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来;

代码演示:

public static void main(String[] args) throws IOException {
        File dir1 = new File("aaa");
        System.out.println(dir1.mkdir());//创建成功则返回true,如果该目录存在则返回false
        
        File dir2 = new File("bbb.txt");//这样写是可以的,文件夹也是可以有后缀的
        System.out.println(dir2.mkdir());//虽然传入的是"bbb.txt",但是创建的是文件夹
        
        File dir3 = new File("ccc\\ddd");
        System.out.println(dir3.mkdirs()); //创建多级目录
}
public static void demo() throws IOException {
    File file = new File("yyy.txt");
    System.out.println(file.createNewFile());//如果没有就创建,返回true

    File file2 = new File("zzz");
    //可以不写后缀,创建成功则返回true;如果文件已经存在 就返回false
    System.out.println(file2.createNewFile());
}
File删除功能

public boolean delete():删除文件或者文件夹

注意:Java中的删除不走回收站;要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹。

代码演示:

public static void main(String[] args) {
    File file1 = new File("yyy.txt");
    System.out.println(file1.delete());//删除文件
    
    File file2 = new File("aaa");
    System.out.println(file2.delete());//删除文件夹
    
    File file3 = new File("ccc");   //如果删除一个文件夹,那么文件夹必须是空的
    System.out.println(file3.delete());
}
File重命名功能

public boolean renameTo(File dest):把文件重命名为指定的文件路径

注意:如果路径名相同,就是改名;如果路径名不同,就是改名并剪切。

代码演示:

public static void demo() {
    File file1 = new File("ooo.txt");
    File file2 = new File("D:\\xxx.txt");
    System.out.println(file1.renameTo(file2));  //不同路径,剪切并改名;改名成功则返回true
}
File判断功能

public boolean isDirectory():判断是否是目录

public boolean isFile():判断是否是文件

public boolean exists():判断是否存在

public boolean canRead():判断是否可读

public boolean canWrite():判断是否可写

public boolean isHidden():判断是否隐藏

注意:windows系统认为所有的文件都是可读的;canWrite() 与windows系统文件的“只读”属性有关;isHidden() 与windows系统文件的“隐藏”属性有关

代码演示:

public static void main(String[] args) {
    File file = new File("zzz");
    file.setReadable(false);
    System.out.println(file.canRead());     //windows系统认为所有的文件都是可读的
    file.setWritable(true);
    System.out.println(file.canWrite());    //windows系统可以设置为不可写
    
    File file2 = new File("aaa.txt");
    System.out.println(file2.isHidden());   //判断是否是隐藏文件
    System.out.println(file.isHidden());
}

public static void demo() {
    File dir1 = new File("ccc");
    System.out.println(dir1.isDirectory()); //判断是否是文件夹
    
    File dir2 = new File("zzz");
    System.out.println(dir2.isDirectory());
    
    System.out.println(dir1.isFile());  //判断是否是文件
    System.out.println(dir2.isFile());
}
File获取功能

代码演示:

public static void main(String[] args) {
    File dir = new File("F:/double/day/video");
    String[] arr = dir.list();      //获取F:/double/day/video下所有的文件和文件夹的名称
    
    for (String string : arr) {
        System.out.println(string);
    }
    
    File[] subFiles = dir.listFiles();
    
    for (File file : subFiles) {        //获取F:/double/day/video下所有的文件和文件夹对象
        System.out.println(file);
    }
}

public static void demo() {
    File file1 = new File("ccc.txt");
    File file2 = new File("D:\\double\\day\\ccc.txt");
    System.out.println(file1.getAbsolutePath());    //获取绝对路径
    System.out.println(file2.getAbsolutePath());
    
    System.out.println(file1.getPath());        //获取构造方法中传入路径
    System.out.println(file2.getPath());
    
    System.out.println(file1.getName());        //获取文件或者文件的名字
    System.out.println(file2.getName());
    
    System.out.println(file1.length());
    
    Date d = new Date(file1.lastModified());    //文件的最后修改时间
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    System.out.println(sdf.format(d));
}
案例:获取指定目录下以.jpg结尾的文件

public static void main(String[] args) {
        File dir = new File("E:\\");
        //方法一
        File[] subFiles = dir.listFiles();  //获取e盘下所有的文件或文件夹对象
        for (File subFile : subFiles) {
            //判断是否是文件 判断文件的名字是否以.jpg结尾
            if(subFile.isFile() && subFile.getName().endsWith(".jpg")) {
                System.out.println(subFile);    //这样方法就只能获取到以.jpg结尾的文件
            }
        }
        
        //方法二
        String[] arr = dir.list(new FilenameFilter() {
            
            @Override
            public boolean accept(File dir, String name) {  
                //dir就是new File("E:\\")对象。name 就是E盘下每个文件和文件夹的名字
                File file = new File(dir, name);    //把E盘下每个文件名称封装成File对象
                return file.isFile() && file.getName().endsWith(".jpg");//判断E盘下每个文件对象 是否是文件 判断文件的名字是否以.jpg结尾
            }
        });
        
        for (String string : arr) {
            System.out.println(string);
        }
    }

文件名称过滤器的使用源码分析

public File{
    public String[] list(FilenameFilter filter) {   //filter接收我们传入的文件名称过滤器对象(也就是传入的匿名内部类)
        String names[] = list();    //获取this对象下所有的文件和文件夹的名字存到names[]数组中
        if ((names == null) || (filter == null)) {//判断文件过滤器是否为null
            return names;
        }
        //创建一个ArrayList集合,用来保存文件名称过滤器过滤出来的文件名称
        List<String> v = new ArrayList<>(); 
        for (int i = 0 ; i < names.length ; i++) {//遍历names[]数组
            if (filter.accept(this, names[i])) {//用传入的文件名称过滤器对象(也就是传入的匿名内部类)调用accept方法(就是匿名内部类中重写的方法),并且传入this和this对象下每个文件和文件夹的名字,看是否符合过滤器过滤条件
                v.add(names[i]);        //如果符合过滤器过滤条件 就添加到集合中
            }
        }
        return v.toArray(new String[v.size()]);//把集合转成数组并返回
    }
}

好了今天就先说到这了,明天继续。想了解更多学习知识,请关注微信公众号“阿Q说”,获取更多学习资料吧!你也可以后台留言说出你的疑惑,阿Q将会在后期的文章中为你解答。每天学习一点点,每天进步一点点。

上一篇下一篇

猜你喜欢

热点阅读