Flie类

1 File类的概述(File更应该叫做一个路径)
     路径分为绝对路径和相对路径
     绝对路径是一个固定的路径,从盘符开始
     相对路径相对于某个位置,在eclipse下是指当前项目下
1.1 构造方法
     File(String pathname):根据一个路径得到File对象
     File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
     File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

import java.io.File;
public class Damo1 {
    public static void main(String[] args) {
        // 1 根据一个路径得到File对象  注意:'\'是转译字符 要使用得用“\\”
        File file = new File("D:\\text.txt");
        System.out.println(file.exists());

        // 2 根据一个目录和一个子文件目录得到File对象
        String parent = "D:";
        String child = "text.txt";
        File file1 = new File(parent,child);
        System.out.println(file1.exists());

        // 3根据一个父File对象和一个子文件目录得到File对象
        String parent3 = "D:";
        String child3 = "text.txt";
        File file3 = new File(parent3);
        //父级路径换成一个file对象 使得父级路径在传入时可以调用File类的一些方法
        File file4 = new File( file3,child3); 
        System.out.println(file4.exists());
    }
}

2 File类的常见功能
2.1 创建功能(如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。)
     public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
     public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
     public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

import java.io.File;
import java.io.IOException;
public class Damo2 {
    public static void main(String[] args) throws IOException {
        //注意:创建file对象时 文件路径可能出错 上抛一个编译时异常 IOException

        // 1 createNewFile() 如果D盘下不存在“text.txt”则创建新文件 返回true
        File file = new File("D:\\text.txt");
        System.out.println(file.createNewFile());

        // 2 mkdir():创建文件夹 如果D盘下没有text这个文件夹 则创建新的文件夹 返回true
        File dir2 = new File("D:\\text");
        System.out.println(dir2.mkdir());

        // 3 mkdirs():创建多级文件夹,如果父文件夹不存在,会帮你创建出来
        File dir3 = new File("D:\\text\\text1");
        System.out.println(dir3.mkdirs());
    }
}

2.2 重命名和删除功能

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

重命名注意事项(如果路径名相同,就是改名。如果路径名不同,就是改名并剪切。)

import java.io.File;
public class Damo3 {
    public static void main(String[] args) {
        //如果路径名相同,就是改名。
        //如果路径名不同,就是改名并剪切
        File file1 = new File("C:\\text2.txt");
        File file2 = new File("D:\\text1.txt");
        // 将C盘下的text2.txt文件 剪切到D盘 并改名为text1
        System.out.println(file1.renameTo(file2));
    }
}


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

    删除注意事项:

         Java中的删除不会存放到回收站。

         要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹 其实window系统下删除文件夹 表面上看起来是把整个文件夹删掉了 其实内部也是对文件夹里的东西做了遍历删除 先将内层文件删除 确定文件夹为空后 再将空文件夹删除

import java.io.File;
public class Damo4 {
    public static void main(String[] args) {
        //删除D盘下的text1文件
        File file = new File("D:\\text1.txt");
        System.out.println(file.delete());
        
        //删除D盘下的text文件夹 (注意 要删除文件夹 那么该文件夹必须为空的)
        File file1 = new File("D:\\text");
        System.out.println(file1.delete());
    }
}

2.3 File类的判断功能
     public boolean isDirectory():判断是否是目录
     public boolean isFile():判断是否是文件
     public boolean exists():判断是否存在
     public boolean canRead():判断是否可读
     public boolean canWrite():判断是否可写
     public boolean isHidden():判断是否隐藏

import java.io.File;
public class Damo5 {
    public static void main(String[] args) {
        File file = new File("D:\\text.txt");

        System.out.println("判断是否是目录"+file.isDirectory());
        System.out.println("判断是否是文件"+file.isFile());
        System.out.println("判断是否存在"+file.exists());

        // 设置文件不可读 不过该方法Window系统下是失效的 Window默认设置所有文件都是可读的
        file.setReadable(false);
        System.out.println("判断是否可读"+file.canRead());
        // 设置文件设置不可写 Window支持此功能
        file.setWritable(false);
        System.out.println("判断是否可写"+file.canWrite());

        System.out.println("判断是否隐藏"+file.isHidden());
    }
}

2.4 File类的获取功能
     public String getAbsolutePath():获取绝对路径
     public String getPath():获取路径
     public String getName():获取名称
     public long length():获取长度。字节数
     public long lastModified():获取最后一次的修改时间,毫秒值
     public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
     public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Damo6 {
    public static void main(String[] args) {
        File file = new File("D:\\text");

        System.out.println("获取文件或文件夹的绝对路径:"+file.getAbsolutePath());
        System.out.println("file对象构造方法传入的路径:" +file.getPath());
        System.out.println("获取文件或者文件夹名称:"+file.getName());
        System.out.println("获取文件内字节数:"+file.length());

        //返回的是一个毫秒值 需进行转换
        System.out.println("\n获取文件最后一次的修改时间,毫秒值"+file.lastModified());
        //转换格式1
        Date d = new Date(file.lastModified());
        System.out.println(d);
        //转换自定义格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyy年 - MM月 - dd日 - HH点:mm分:ss秒");
        System.out.println(sdf.format(d));


        //list() 获取文件夹内所有文件的名称 返回的是一个String数组
        System.out.println("\n获取文件夹内所有文件的名称:");
        String [] arr = file.list();
        for (String str:arr){
            System.out.println(str);
        }

        //list() 获取指定目录下的所有文件或者文件夹的File对象 返回的是一个File对象数组 可以直接用对象进行操作
        System.out.println("\n获取文件夹内所有文件的File对象:");
        File [] files = file.listFiles();
        for (File f1:files){
            System.out.println(f1.getName());
        }
    }
}

小练习(需求:判断E盘目录下是否有后缀名为.txt的文件,如果有,就输出该文件名称)

import java.io.File;
public class Damo7 {
    public static void main(String[] args) {
        File file = new File("D://");
        // 方式1
        String [] arr = file.list();
        for (String str :arr){
            if (str.endsWith(".txt")){ //调用字符串方法查看结尾字符
                System.out.println(str);
            }
        }

        // 方式2 (开发常用 运用递归思想即可获取该文件夹下的所有需要的文件 这里只是简单的单层查找)
        File [] files = file.listFiles();
        for (File file1 : files){
            if (file1.isFile()&&file1.getName().endsWith(".txt")){
                System.out.println(file1);
            }
        }
    }
}

2.5 文件名称过滤器

 public String[] list(FilenameFilter filter) 

FilenameFilter接口里面有个 accept(File dir, String name)方法 实现该方法可以把不符合条件的文件过滤掉

(咋一看有点蒙 ,结合底下list() 方法的源码 把FilenameFilter接口当成传入list()的参数 多看几次就好了)

import java.io.File;
import java.io.FilenameFilter;
public class Damo8 {
    public static void main(String[] args) {
        File file = new File("D://");
        //FilenameFilter()是接口 实例化得新建一个类实现它 太麻烦 这里直接传了一个匿名内部类
        String[] arr = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                // 根据一个父File对象和一个子文件目录得到File对象
                File file = new File(dir, name);
                // 如果file对象是文件 file对象的名字是以.txt结尾的 那么返回true 把他存进数组
                return file.isFile() && file.getName().endsWith(".txt");
            }
        });
        //遍历数组 拿取数组内容
        for (String str : arr) {
            System.out.println(str);
        }
    }
}


  /* * =======================[ list 方法源码 ]=============================
   public String[] list(FilenameFilter filter) {
        String names[] = list(); //没有参数的list 拿到当前文件夹下所有的文件与文件夹
        if ((names == null) || (filter == null)) { //如果数组为空或者过滤器filter为空 直接返回 names[]
            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()]); // 将集合转换为数组后返回
   }
   */

猜你喜欢

转载自blog.csdn.net/a13085/article/details/81448451