File类总结

最近一直在忙项目,所以没有及时更新小知识,今天就为大家讲一下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 String getAbsolutePath():获取绝对路径

  • public String getPath():获取路径

  • public String getName():获取名称

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

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

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

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

    注意:getPath() 获取的是构造方法里面传入的路径

代码演示:

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将会在后期的文章中为你解答。每天学习一点点,每天进步一点点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿Q说代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值