IO--File类

File类概述及构造方法

import java.io.File;
import java.lang.reflect.Field;

/*

        我们要想实现IO的操作,就必须知道硬盘上的文件表现形式
        java中用一个类来供我们使用,抽象的表示硬盘上的各种文件
        这个叫做File.

        File: 文件和目录路径名的抽象表示。今后我们看到的目录就代表文件夹的意思。

        File类的构造方法:
            File(File parent, String child)
                从父抽象路径名和子路径名字符串创建新的 File实例。
            File(String pathname)
                通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
            File(String parent, String child)
                从父路径名字符串和子路径名字符串创建新的 File实例。

       创建File对象的原因:
          对想要进行操作的文件或者文件夹,将其封装成一个File对象,
          然后调用该对象中的方法对文件或者文件夹进行操作

*/

public class FileDemo1 {
    public static void main(String[] args) {
      
        //File(String pathname) 
        //通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
        //将E:\数加科技\十四期\day01目录封装成一个File对象
        File file = new File("E:\\数加科技\\十四期\\day01");
        System.out.println(file);

        //File(File parent, String child)
        //从父抽象路径名和子路径名字符串创建新的 File实例
        //根据一个目录和一个子文件得到一个File对象
        File file1 = new File(file, "上课须知.txt");
        System.out.println(file1); //File类重写了toString()方法

        //File(String parent, String child)
        //从父路径名字符串和子路径名字符串创建新的 File实例。
        File file2 = new File("E:\\数加科技\\十四期\\day01", "上课须知.txt");
        System.out.println(file2);
    }
}

File类的创建功能

import java.io.File;
import java.io.IOException;

/*

        创建功能
            public boolean createNewFile()   结果  true如果命名文件不存在并被成功创建; false如果命名文件已经存在 
               当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
            
            public boolean mkdir()   结果 true当且仅当该目录被创建时; false否则 
               创建由此抽象路径名命名的目录。
            
            public boolean mkdirs()   结果 true当且仅当该目录已创建,以及所有必需的父目录; false否则            
               创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。

*/

public class FileDemo2 {
    public static void main(String[] args) {
        //创建File对象,其中 a.txt 是需要创建的文件
        File file = new File("E:\\数加科技\\十四期\\a.txt");
      
      
        //public boolean createNewFile()
        //创建一个新的文件
      
        //此时会出现编译时期异常
        //boolean newFile = file.createNewFile()
          
        boolean newFile = false;
        try {
            newFile = file.createNewFile();
        } catch (IOException e) {
            //如果我们想要创建的文件,没有指定的目录,就会报错
            //IOException: 系统找不到指定的路径。
            e.printStackTrace();
        }
        //如果指定文件已经存在,返回false
        System.out.println(newFile);


        //public boolean mkdir()
        //在指定目录下创建文件夹
        //E:\数加科技\十四期下创建一个xiaohu文件夹
        //如果该文件夹已经存在,就不会创建了,返回false
        File file1 = new File("E:\\数加科技\\十五期\\xiaohu");
        boolean mkdir = file1.mkdir();
        System.out.println(mkdir);

      
        //public boolean mkdirs()
        //创建多级文件夹
        //E:\数加科技\十五期\xiaohu
        File file2 = new File("E:\\数加科技\\十五期\\xiaohu");
        System.out.println(file2.mkdirs());

        //今后开发的时候,要搞清楚你是要创建文件还是创建文件夹
        //创建文件的时候,需要添加后缀名
        boolean newFile1 = false;
        try {
            newFile1 = file2.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(newFile1);

        //同一个目录下,文件和文件夹的名字不能重复
    }
}

File类的删除功能

import java.io.File;
import java.lang.reflect.Field;

/*

    删除功能(直接抹去,回收站里也没有)
        public boolean delete()  true当且仅当文件或目录被成功删除时; false否则
            删除由此抽象路径名表示的文件或目录。 如果此路径名表示目录,则目录必须为空才能删除。

*/

public class FileDemo3 {
    public static void main(String[] args) {
        //创建File对象
        File file = new File("E:\\数加科技\\十五期\\xiaohu.txt");
        System.out.println(file.delete());

        //要想删除一个文件夹,这个文件夹里面的内容必须是空的
        File file1 = new File("E:\\数加科技\\十五期\\xiaohu");
        System.out.println(file1.delete());
    }
}

File类的重命名功能

import java.io.File;

/*
    重命名功能
        public boolean renameTo(File dest)  true当且仅当重命名成功; false否则 
                  重命名由此抽象路径名表示的文件。

 */
public class FileDemo4 {
    public static void main(String[] args) {
        File file = new File("E:\\数加科技\\十四期\\ftm.jpg");

        //public boolean renameTo(File dest)
        //现在想把ftm.jpg ---> 冯提莫.jpg
        //该方法需要传入一个File对象,通过匿名对象的形式
        boolean b = file.renameTo(new File("E:\\数加科技\\十四期\\冯提莫.jpg"));
        System.out.println(b);
    }
}

File类的判断功能

import java.io.File;

/*
        判断功能
            public boolean isDirectory()
            		判断是否是一个目录
            public boolean isFile()
            		判断是否是一个文件
            public boolean exists()
            		判断是否存在
            public boolean canRead()
            		判断是否可读
            public boolean canWrite()
            		判断是否可写
            public boolean isHidden()
            		判断是否隐藏

 */
public class FileDemo5 {
    public static void main(String[] args) {
        //创建File对象
        File file = new File("E:\\数加科技\\十四期\\冯提莫.jpg");

        //public boolean isDirectory()
        //判断是否是一个目录
        System.out.println(file.isDirectory());

        //public boolean isFile()
        //判断是否是一个文件
        System.out.println(file.isFile());

        //public boolean exists()
        //判断是否存在
        System.out.println(file.exists());

        //public boolean canRead()
        //判断是否可读
        System.out.println(file.canRead());

        //public boolean canWrite()
        //判断是否可写
        System.out.println(file.canWrite());

        //public boolean isHidden()
        //判断是否隐藏
        System.out.println(file.isHidden());
    }
}

File类的基本获取功能及时间戳和日期的转换

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

/*

        绝对路径(完整路径):带有盘符的
        相对路径:相对于一个目录开始(不带盘符的)

        基本获取功能
            public String getAbsolutePath()
            	返回此抽象路径名的绝对路径名字符串。
            
            public String getPath()
            	将此抽象路径名转换为路径名字符串。
            
            public String getName()  由此抽象路径名表示的文件或目录的名称,如果此路径名的名称序列为空,则为空字符串 
            	返回由此抽象路径名表示的文件或目录的名称。
            
            public long length()  获取字节大小
            	返回由此抽象路径名表示的文件的长度。 如果此路径名表示目录,则返回值未指定。
            
            public long lastModified()  返回的是时间戳,精确到了毫秒
            	返回此抽象路径名表示的文件上次修改的时间

*/

public class FileDemo6 {
    public static void main(String[] args) {
        //创建File对象
        File file = new File("com.shujia.wyh.day27.FileDemo6");

        //public String getAbsolutePath()
        //获取绝对路径
        System.out.println(file.getAbsolutePath());

        //public String getPath()
        //获取路径:创建File对象时输入的路径
        System.out.println(file.getPath());

        //public String getName()
        //获取名称
        //com.shujia.wyh.day27.FileDemo6
        System.out.println(file.getName());

        //public long length()
        //获取文件的字节大小
        File file1 = new File("E:\\数加科技\\十四期\\冯提莫.jpg");
        System.out.println(file1.length());

        //public long lastModified()
        //获取文件的最后一次修改的时间
        //返回的是时间戳,精确到了毫秒
        File file2 = new File("E:\\数加科技\\十四期\\a.txt");
        //1640395546537--改之前的
        System.out.println(file2.lastModified());
        //1640397590639--改之后的

        //时间戳与日期的转换
        //Date类中有个有参构造方法
        //public Date(long date)
        Date date = new Date(file2.lastModified());//将获取到的时间戳传进去
        //调用有参构造方法,创建SimpleDateFormat对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        String s = sdf.format(date);

        System.out.println(s);
    }
}

File类的高级获取功能

import java.io.File;

/*
        高级获取功能
            public String[] list()
            	获取指定目录下的所有文件或者文件夹的名称,组成一个数组
            public File[] listFiles()
            	获取指定目录下的所有文件或者文件夹组成的File数组
*/
public class FileDemo7 {
    public static void main(String[] args) {
        //创建File对象
        File file = new File("E:\\数加科技\\十四期");

        //public String[] list()
        //获取指定目录下的所有文件或者文件夹的名称,组成一个数组
        String[] list = file.list();
        for(String s : list){
            System.out.println(s);
        }
      
        System.out.println("================================");

        //public File[] listFiles()
        //获取指定目录下的所有文件或者文件夹组成的File数组
        File[] files = file.listFiles();
        for(File f : files){
            System.out.println(f.getName());
        }
    }
}

File类的高级获取功能练习

import java.io.File;
import java.util.ArrayList;

/*
        练习:判断E:\数加科技\十四期下面有没有后缀名为.jpg的文件,如果有,就输出此文件的名称

        1、将E:\数加科技\十四期封装成一个File对象
        2、获取该目录下所有的文件和文件夹组成File数组
        3、遍历数组,得到每一个File对象,判断是否是文件
        4、判断是否是文件
            是:继续判断是否以.jpg后缀的
                是:就输出此文件的名称
                不是:跳过
            不是:跳过
*/

public class FileDemo8 {
    public static void main(String[] args) {
        //将E:\数加科技\十四期封装成一个File对象
        File file = new File("E:\\数加科技\\十四期");

        //获取该目录下所有的文件和文件夹组成File数组
        File[] files = file.listFiles();
        //定义一个变量统计一共有多少.jpg后缀的文件
        int count = 0;
        //创建一个集合对象,用来添加.jpg后缀的文件名
        ArrayList<String> strings = new ArrayList<>();

        //遍历数组,得到每一个File对象,判断是否是文件
        for(File f : files){
            //判断是否是文件
            if(f.isFile()){
                //继续判断是否以.jpg后缀的
                if(f.getName().endsWith(".jpg")){
                    //是就就将文件名添加到集合中              
                    strings.add(f.getName());
                    count++;
                }
            }
        }
        System.out.println(file.getName()+"目录下共有"+count+"个以.jpg后缀的文件");
        if(count>0){
            System.out.println("它们分别是:");
            for (String s : strings){
                System.out.println(s);
            }
        }
    }
}

文件名称过滤器

import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;

/*

        文件名称过滤器的实现思想及代码
            public String[] list(FilenameFilter filter)
            public File[] listFiles(FilenameFilter filter)

        在获取文件的同时,结果就已经满足了我们要查找的条件
        
        上一道练习:
        判断E:\数加科技\十四期下面有没有后缀名为.jpg的文件,如果有,就输出此文件的名称
        1、我们之前是先获取该目录下所有的文件和文件夹,然后一个一个遍历判断
        2、而文件名称过滤器是直接在获取的时候,返回的结果就是满足条件的

*/

public class FileDemo9 {
    public static void main(String[] args) {
        File file = new File("E:\\数加科技\\十四期");
        //使用匿名内部类的形式传参
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //什么都没有输出
//                return false;
                //该目录下的文件全都输出了
//                return true;
              
                //通过测试发现,该目录下的文件或者文件夹到底该不该加入到数组中
                //取决于这里的返回值是true还是false
                //通过源码发现
                //dir:父级目录
                //name:目录下文件的名称
                File file1 = new File(dir, name);
                //判断是否是一个文件
                boolean b1 = file1.isFile();
                //判断是否以 .jpg 为后缀
                boolean b2 = file1.getName().endsWith(".jpg");
                //两者同时满足有一个是false都不行
                return b1 && b2;
            }
        });   
        if(files!=null){
            for(File f : files){
                System.out.println(f);
            }
        }
    }
}
posted @ 2021-12-25 21:14  赤兔胭脂小吕布  阅读(34)  评论(0编辑  收藏  举报