Java教程

java--File

本文主要是介绍java--File,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

File的概述

为什么要学习File

因为在操作系统中,需要永久保存的数据,都是以文件的形式存在,所以要想操作这些被永久保存的数据,就首先必须在java语言中如何描述,表示文件

相对路径与绝对路径

绝对路径:
1.绝对路径名是 完整的路径名,不需要任何其他信息就可以定位它所表示的文件
windows:E:\demo\first\a.txt

相对路径

​ 2.相反,相对路径名必须使用取自其他路径名的信息进行解释(不完整的路径名)
​ windows: (e:\demo)second\a.txt

​ java语言中,相对路径默认相对于谁?
​ 默认情况下,java.io包中的类总是根据 当前用户目录 来解析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。

    public static void main(String[] args) {
        // 获取默认的相对目录
        String path = System.getProperty("user.dir");
        System.out.println(path);
    }

不同系统的路径表示

​ 路径表示:
​ 1.对于类 UNIX 平台,绝对路径名的前缀始终是 “/”。相对路径名没有前缀。表示根目录的绝对路径名的前缀为 “/” 且名称序列为空。
​ 绝对路径: /home/st/6379.conf
​ 相对路径: st/a.txt
​ 根目录: /

​ 2.对于 Microsoft Windows 平台,包含盘符的路径名前缀由驱动器号和一个 “:” 组成。如果路径名是绝对路径名,还可能后跟 "\“
​ 绝对路径: e:\st\a.txt
​ 相对路径:没有盘符前缀 st\a.txt

File类

件和目录路径名的抽象表示形式。

可以表示文件,也可以表示目录

构造方法

File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
 @Test
    public void myTest1(){
        String path = System.getProperty("user.dir");
        System.out.println("path = " + path);
        // File (String pathname)
        File file = new File("D:\\app2\\a.txt");
        // 在这里绝对路径是什么
        // D:\workspace2\37th\java37th\15-file\a.txt
        File file2 = new File("a.txt");
        File file1 = new File("D:\\b");

        
        //File (String parent, Sting child)
        File file3 = new File("D:\\app2", "a.txt");
        
        //File (File parent, String child)
        File file4 = new File(new File("D:\\app2"), "a.txt");
    }

成员方法

创建功能

//只负责创建文件,目录路径如果不存在,会报错而不是帮你创建
public boolean createNewFile() 

//只负责创建目录,但只能创建单层目录,如果有多级目录不存在的话,创建失败
public boolean mkdir()
    
//只负责创建目录,但可以创建多级目录,如果多级目录不存在,则帮你全部创建
public boolean mkdirs()

mkdir 和 mkdirs创建目录的区别:

  • mkdir仅能在已经存在的目录下,创建新的目录
  • mkdirs 当要创建的目标目录,如果目标目录的父目录不存在的时候,它会将不存在的目标木目录的父目录 连同目标目录一起,都创建好

重命名功能

// 重新命名此抽象路径名表示的文件
public boolean renameTo(File dest)
  • 在源文件,和修改之后的目标文件在同一目录的时候:
    • 效果只是重命名
  • 当源文件和,修改之后的目标文件当不在同一目录的时候:
    • 移动文件
    • 重命名

删除功能

// 删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除
// delete不会因为文件不存在,路径名不正确而抛出异常,只会返回false, 并且不会进入回收站
public boolean delete()
    /*
     * 删除功能
     * 创建日期:2022/1/14 16:27
     * @return void
     * @author 景天
     */
    @Test
    public void myTest3(){
        // // 删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除
         delete不会因为文件不存在,路径名不正确而抛出异常,只会返回false, 并且不会进入回收站
        //public boolean delete()
        File file = new File("a\\b\\c\\");
        System.out.println("file.delete() = " + file.delete());


    }

判断功能

// 判断File对象是否表示的是一个文件
public boolean isFile()

//判断File对象是否表示的是一个目录
 public boolean isDirectory() 

//判断,File对象表示的文件,是否物理存在
public boolean exists() 
   /*
     * 判断功能
     * 创建日期:2022/1/14 16:33
     * @return void
     * @author 景天
     */
    @Test
    public void myTest4(){
        // // 判断File对象是否表示的是一个文件
        //public boolean isFile()
        File file = new File("a.txt");
        System.out.println("file.isFile() = " + file.isFile());
        File file2 = new File("a");
        System.out.println("file2.isFile() = " + file2.isFile());

        判断File对象是否表示的是一个目录
        // public boolean isDirectory()
        System.out.println("file.isDirectory() = " + file.isDirectory());
        System.out.println("file2.isDirectory() = " + file2.isDirectory());

        判断,File对象表示的文件,是否物理存在
        //public boolean exists()
        System.out.println("file.exists() = " + file.exists());
        File file1 = new File("a\\b\\c\\a.jpg");
        System.out.println("file1.exists() = " + file1.exists());
    }

基本获取功能

//获取File对象表示的抽象文件的绝对路径
public String getAbsolutePath()

//获取File对象表示的抽象文件,路径名字符串
 public String getPath()

//获取文件或者目录的名字
 public String getName()

//返回由此抽象路径名表示的文件的长度。不能返回文件夹的长度
//此抽象路径名表示的文件的长度,以字节为单位;如果文件不存在,则返回 0L
 public long length()

//返回此抽象路径名表示的文件最后一次被修改的时间。
//表示文件最后一次被修改的时间的 long 值,用与时间点(1970 年1月1日,00:00:00 GMT)之间的毫秒数表示
public long lastModified()

高级获取功能

//返回一个字符串数组,这些字符串包括,此抽象的路径名表示的目录中的所有文件和文件夹的名字
//如果File对象表示的是一个文件,则返回null
//只能获取当前目录的下一层,并不是获取所有层级
//如果是一个空目录,返回一个长度为0的数组,而不是null
public String[] list() 
        
//返回指定File目录下的文件和文件夹的绝对路径形式的File对象数组
//如果File对象表示的是一个文件,则返回null
//只能获取当前目录的下一层,并不是获取所有层级
//如果是一个空目录,返回一个长度为0的数组,而不是null
public File[] listFiles()

list

   /*
     *  高级获取功能  list
     * 创建日期:2022/1/14 17:09
     * @return void
     * @author 景天
     */
    @Test
    public void myTest6(){
        // //返回一个字符串数组,这些字符串包括,此抽象的路径名表示的目录中的所有文件和文件夹的名字
        如果File对象表示的是一个文件,则返回null
        只能获取当前目录的下一层,并不是获取所有层级
        如果是一个空目录,返回一个长度为0的数组,而不是null
        //public String[] list()


        //File file = new File("a.txt");
        //String[] list = file.list();
        //System.out.println(list);

        File dir = new File("D:\\app2");
        String[] list = dir.list();
        // 遍历 并打印
        System.out.println("Arrays.toString(list) = " + Arrays.toString(list));

        File dir2 = new File("a\\b");
        String[] list1 = dir2.list();
        System.out.println("Arrays.toString(list1) = " + Arrays.toString(list1));
    }

listFiles

    /*
     * 高级获取功能 listFiles
     * 创建日期:2022/1/14 17:15
     * @return void
     * @author 景天
     */
    @Test
    public void myTest7() {
        返回指定File目录下的文件和文件夹的绝对路径形式的File对象数组
        如果File对象表示的是一个文件,则返回null
        只能获取当前目录的下一层,并不是获取所有层级
        如果是一个空目录,返回一个长度为0的数组,而不是null
        //public File[] listFiles()
        File file = new File("a.txt");
        File[] files = file.listFiles();
        System.out.println(files);

        File dir = new File("D:\\app2");
        File[] files1 = dir.listFiles();
        System.out.println("Arrays.toString(files1) = " + Arrays.toString(files1));

        File dir2 = new File("a\\b");
        File[] files2 = dir2.listFiles();
        System.out.println("Arrays.toString(files2) = " + Arrays.toString(files2));
    }

image-20220114172305380

练习1
判断某个目录(单级)下有没有a.jpg文件,有的话输出

    /*
     * 判断某个目录(单级)下有没有a.jpg文件,有的话输出
     * 创建日期:2022/1/14 17:24
     * @return void
     * @author 景天
     */
    @Test
    public void myTest8() {
        // 创建File对象
        File dir = new File("D:\\app2");
        // 遍历 listFiles 得到File[] 数组
        File[] files = dir.listFiles();
        System.out.println(Arrays.toString(files));

        for (File f : files) {

            // 逐个判断
            // 判断是否是文件
            if (f.isFile()) {
                // 如果是文件,再次判断是否是a.jpg文件
                if (f.getName().endsWith("a.jpg")) {
                    // 如果是,输出文件名字
                    System.out.println("找到了");
                    System.out.println("f = " + f.getName());
                }

            }

        }
    }

练习2
递归输出某个目录下的所有java文件

  /*
     * 递归输出某个目录下的所有java文件
     * 创建日期:2022/1/14 17:32
     * @return void
     * @author 景天
     */
    @Test
    public void myTest9() {
        // 创建File对象
        File dir = new File("D:\\app2");

        findAllJavaFile(dir);
    }

    private void findAllJavaFile(File dir) {
        // 首先把文件 目录都列出来  listFiles
        File[] files = dir.listFiles();
        // 遍历File[] 数组
        for (File f : files) {
            // 判断是否为文件
            if (f.isFile()) {
                // 如果是文件.再去判断是否是.java文件
                if (f.getName().endsWith(".java")) {
                    // 如果是 ,输出绝对路径
                    System.out.println(f.getAbsolutePath());
                }

            }else {
                //如果不是文件
                // 递归,再次调用findAllJavaFile()
                findAllJavaFile(f);
            }

        }
    }

文件过滤器

  • 自定义获取功能是在高级获取功能的基础上,加了一个过滤器,所以高级功能的特点它都有

  • FileFilter是一个接口,它只有下面一个方法

    • //测试指定抽象路径名是否应该包含在某个路径名列表中
      boolean accept(File pathname)
      
    • 这个方法相当于把高级功能中listFiles()获取的File数组中File对象遍历一遍,然后逐个判断

    • 符合条件的留下,不符合条件的干掉(丢弃)-

  • 常用匿名内部类来做实现

练习:
输出某个目录(单级)下的所有java文件,使用过滤器

手写自定义类的方式去做

class MyFilter implements FileFilter{

    @Override
    public boolean accept(File pathname) {
        return pathname.getName().endsWith(".java");
    }
}

    @Test
    public void myTest10(){
        // 输出某个单级目录下的java文件
        File dir = new File("D:\\app2");
        File[] files = dir.listFiles(new MyFilter());
        System.out.println("Arrays.toString(files) = " + Arrays.toString(files));
    }

匿名内部类方式

    @Test
    public void myTest11(){
        // 匿名内部类方式
        // 输出某个单级目录下的java文件
        File dir = new File("D:\\app2");
        File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".java");
            }
        });
        System.out.println("Arrays.toString(files) = " + Arrays.toString(files));
    }
这篇关于java--File的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!