文件(File类)

文件(File类)

一、File类的概述和构造方法

1.File类的概述

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

​ 这个File类可以用来表示文件,也可以用来表示目录

2.构造方法

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

​ 路径:

​ 绝对路径:带有盘符号的详细路径

​ 相对路径:不带有盘符号的路径

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

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

3.案例演示

//通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例;
File file = new File ("D:\\IntelliJIDEA2018.2.8_install\\bin\\idea.exe.vmoptions");//绝对路径
    File file1 = new File("F:\\abc");
    //相对路径:项目文件夹的根目录
    File file2 = new File("a.txt");
    
    //File(String parent, String child)
    //根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例;
    //参数1,是父路径,参数2,是子文件名
    File file3 = new File("D:\\IntelliJIDEA2018.2.8_install\\bin\\", "idea.exe.vmoptions");
	
    //File(File parent, String child)
    //根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例;
	//这里的parent是文件类型的;
    File file4 = new File("D:\\IntelliJIDEA2018.2.8_install\\bin\\");
    File file5 = new File(file4, "idea.exe.vmoptions");
}

二、File类的创建功能

1.创建功能

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

​ public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了;注意这个方法只能

创建单层目录,如果创建多层目录就需要一层一层去创建

​ public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来 可以创建多层目

录,也可以创建单层目录

2.案例演示

		File file = new File("E:\\ccc.txt");
        //创建文件,返回值的意思是,文件是否创建成功
        //第一次创建改文件时,创建成功返回true
        //文件已经存在,你重复创建返回false
        boolean b = file.createNewFile();
        System.out.println(b);

        File file1 = new File("a.txt"); //此时会在你的当前项目下创建一个文件;
    	//注意事项:如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
        file1.createNewFile();
File file = new File("E:\\demo");
//创建目录
//文件夹和文件的关系:笔筒和笔
//返回值是:目录是否创建成功
//若重复创建目录,返回false
boolean b = file.mkdir(); //创建单级目录
System.out.println(b);

File file2 = new File("E:\\demo2\\aaa\\bbb");
//创建单级或多级目录
boolean mkdir = file2.mkdirs();
System.out.println(mkdir);

三、File类的删除功能

1.删除功能

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

​ 注意:删除文件夹时,这个文件夹必须是空文件夹;如果这个文件夹里面有文件,则不能删除

2.案例演示

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

File file = new File("E:\\ccc.txt");
//返回值,代表是否删除成功
boolean b = file.delete();
System.out.println(b);
File file1 = new File("a.txt");
boolean delete = file1.delete();
System.out.println(delete);

//删除这个目录
File file2 = new File("E:\\demo");
boolean delete1 = file2.delete();
System.out.println(delete1);

//删除多级目录
File file3 = new File("E:\\demo2");
boolean delete2 = file3.delete();
System.out.println(delete2);
删除多级目录:delete() 不能直接删除多级目录,如果 你想要删除多级目录,你可以使用递归来递归删除
import java.io.File;

public class Demo1 {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\Administrator\\Desktop\\pictures");

        deletFiles(file);
    }

    private static void deletFiles(File file) {
        File[] files = file.listFiles();
        for (File f : files) {
            if(!f.isFile()) {
                deletFiles(f);
            }else {
                f.delete();
            }
        }
        file.delete();
    }
}

四、File类的重命名功能

1.重命名功能

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

2.案例演示

注意事项:
	如果路径名相同,就是改名。
	如果路径名不同,就是改名并剪切。
// renameTo(file1); 这个方法有两个功能
 //一个可以重命名:你传入的这个新文件,和新文件的路径一致,只是文件名不一样了,就会重命名
 //一个可以剪切:你传入的这个新文件,和旧文件路径不一致,就会把旧文件剪切走
 File file = new File("b.txt");
 File file1 = new File("abc.txt");

 boolean b = file.renameTo(file1); //返回值是否重名成功
 System.out.println(b);

 System.out.println("====================");
 File file2 = new File("abc.txt");
 File file3 = new File("E:\\abc.txt");
 file2.renameTo(file3);

五、File类的判断功能

1.判断功能

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

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

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

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

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

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

​ public boolean isAbsolute(); 判断是否使用的是绝对路径

2.案例演示

File file = new File("C:\\Users\\ShenMouMou\\Desktop\\aa.txt");
boolean b = file.canRead();
boolean b1 = file.canWrite();
System.out.println(b);
System.out.println(b1);
//判断文件是否隐藏
boolean hidden = file.isHidden();
System.out.println(hidden);
//file.canExecute(); Linux 下判断文件是否可执行
boolean absolute = file.isAbsolute(); //判断是否是绝对路径
System.out.println(absolute);

boolean absolute1 = new File("b.txt").isAbsolute();
System.out.println(absolute1);
File file = new File("abc.txt");
boolean file1 = file.isFile();

System.out.println(file1);
//判断是否是目录
boolean directory = file.isDirectory();
System.out.println(directory);
File abc = new File("abc");
boolean directory1 = abc.isDirectory();
System.out.println(directory1);

六、File类的获取功能

1.获取功能

​ public String getAbsolutePath(): 获取绝对路径

​ public String getPath(): 获取相对路径

​ public String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定

父目录,则返回 null。

​ public File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定

父目录,则返回 null。

​ public long getTotalSpace() 返回此抽象路径名指定的分区大小。 返回总容量 单位字节

​ public long getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。返回剩余容量

单位字节
public String getName(): 获取名称

​ public long length(): 获取长度:字节数

​ public long lastModified(): 获取最后一次的修改时间,毫秒值

​ public String[] list(): 获取指定目录下的所有文件或者文件夹的名称数组

​ public File[] listFiles(): 获取指定目录下的所有文件或者文件夹的File数组

2.案例演示

File file = new File("C:\\Users\\ShenMouMou\\Desktop\\aa.txt");
//获取文件的长度,获取的是文件的字节数
long length = file.length();
System.out.println(length);

//获取文件名
String name = file.getName();
System.out.println(name);

//获取文件的父路径,返回的是字符串形式
String parent = file.getParent();
System.out.println(parent);

//获取文件的父路径,返回的是File类型,更加灵活
File parentFile = file.getParentFile();
String s = parentFile.toString();
System.out.println(s);

//获取文件的绝对路径,返回的的File形式,更加灵活
File absoluteFile = file.getAbsoluteFile();

//获取文件的绝对路径,返回的是字符串形式
String absolutePath = file.getAbsolutePath();
System.out.println(absoluteFile.toString());
System.out.println(absolutePath);

//获取相对路径
File file1 = new File("b.txt");
String path = file1.getPath();
System.out.println(path);
/*
	File file = new File("abc.txt");
        //判断文件或目录是否存在
        boolean exists = file.exists();

        if(!exists){
            file.createNewFile();
        }
*/

public class Demo {
    public static void main(String[] args) {
        File file = new File("E:\\");
        //获取磁盘的总大小,单位字节
        long totalSpace = file.getTotalSpace();
        System.out.println((totalSpace/1024/1024/1024.0) +" GB");
        //获取剩余容量
        long freeSpace = file.getFreeSpace();
        System.out.println((freeSpace / 1024 / 1024 / 1024.0) + " GB");
        //已用容量=磁盘的总大小-剩余容量
    }
}

public class Demo {
    public static void main(String[] args) {
        //获取文件的最后一次修改时间
        File file = new File("C:\\Users\\Desktop\\img.png");
        //单位是毫秒值
        long time= file.lastModified();
        //把毫秒值,转换成年月日,时分秒
        Date date = new Date(time);
        String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
        System.out.println(format);
    }
}

3.输出指定目录下指定后缀的文件名

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

​ 分析:
​ a: 把E:\img这个路径封装成一个File对象

​ b: 获取该路径下所有的文件或者文件夹对应的File数组

       c: 遍历这个数组,进行判断
public class MyTest {
    public static void main(String[] args) {
       
        File file = new File("E:\\img");
        String[] list = file.list();
        for (String s : list) {
            //System.out.println(s);
            File file1 = new File(file, s);
            if(file1.isFile()&&file1.getName().endsWith(".jpg")){
                System.out.println(file1.getName());
            }
        }
    }
}

七、文件名称过滤器的概述及使用

1.文件名称过滤器的概述

​ public String[] list(FilenameFilter filter):获取指定目录下的所有文件或者文件夹的名称数组

​ public File[] listFiles(FilenameFilter filter):获取指定目录下的所有文件或者文件夹的File数组

2.文件名称过滤器的使用:

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

分析:

  • a: 把E:\demo这个路径封装成一个File对象
  • b: 获取所有的以.jpg结尾的文件数组 (相当于过滤)
  • c: 遍历数组
import java.io.File;
import java.io.FileFilter;

public class Demo5 {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\Administrator\\Desktop\\pictures");
        File[] files = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File f) {
                if (f.isFile() && f.getName().endsWith(".jpg")) {
                    return true;
                } else {
                    return false;
                }
            }
        });
        for (File f : files) {
            System.out.println(f.getAbsolutePath());
        }
    }
}

八、修改多级目录下的指定文件的后缀名

import java.io.File;

public class Demo2 {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\Administrator\\Desktop\\pictures");
		
		//使用递归方法
        renameFiles(file);
    }

    private static void renameFiles(File file) {
        File[] files = file.listFiles();
        for (File f : files) {
            if(!f.isFile()) {
                renameFiles(f);
            }else if(f.isFile() && f.getName().endsWith(".mp4")) {
                String s = f.getName().substring(15);
                File file1 = new File(f.getParentFile(), s);
                f.renameTo(file1);
                System.out.println(file1.getAbsolutePath());
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值