复习13:File

File相关

  • File对象
  • 类路径
  • 文件过滤器
  • 案例:递归删除多级目录

File对象

File对象是什么

文件或者目录

File对象的创建
  • File(File parenet,String childPathName)

  • File(String pathname)

    • 只是在JVM中创建了一个file对象,与本地无关
  • File(String parentPathName,String childPathName)

  • File(URI uri)

    • URI:统一资源标识符

      • C:\winods\ …
      • \ubt\home\ …
    • URL:网络资源标识符

      • http:// …
      • https:// …
      • ftp:// …

绝对路径:从盘符/根目录出发的路径

相对路径:从当前目录出发的路径,Java中的默认相对路径是工程所在目录

Java中,“\”代表转义字符,不能作为路径的分割符

  • 可以使用“/”代替
  • 可以使用“\ \”代替
File对象的常用方法
  • boolean exist():file对象是否存在于本地
  • boolean isDirectory():file对象是否是目录
  • boolean isFile():file是否是文件
  • boolean mkdir():若file对象不存在,则创建一个file目录
    • 只能创建一级目录,不能创建多级目录
  • boolean mkdirs():若file对象不存在,则创建一个多级目录
  • boolean createNewFile():若file对象不存在,则创建一个file文件
    • 若file对象存在于多级目录之中,则多级目录必须存在;若不存在,将抛出异常
  • String getName():获取file对象的名字
  • String getPath():获取file对象的路径
  • int length():获取file对象的长度
  • long lastModified():获取file对象最后一次被修改的时间
  • boolean delete():删除file对象
    • 只能删除文件或者空目录,无法删除多级目录

注意1:同一个file对象只能选择mkdir()、createNewFile()中的一种使用,若两种方法同时使用,后面的方法不起作用(前面的方法执行后,本地已存在file对象


类路径

classpath,也叫classes

  • Java中的默认类路径:Java工程下的src目录中的文件编译后的目标目录—>Java工程下的bin目录

.Java文件被编译成.class文件,无法被编译的文件原封不动地复制过去

动态获取绝对路径
  • 类加载器的作用:将.class文件加载到JVM
  • 类加载器的种类:三种,其中两种用来加载jre中的类库,剩下一种用来加载程序员写的类
  • 类加载器的使用:
package day20191112;

public class Demo01 {
	public void ClassLoaderTest() {
        //获取类加载器
		ClassLoader cl = Demo01.class.getClassLoader();
        //获取***当前src目录下的“目标文件”***的绝对路径
		String path = cl.getResource("day20191112/demo.txt").getPath();
		System.out.println(path);
	}
}
package day20191112;

public class Demo01 {
	public void ClassLoaderTest() {
        //获取***当前包下的目标文件***的绝对路径
		String path = Demo01.class.getResource("demo.txt").getPath();
		System.out.println(path);
	}
}

同一个工程下的所有类共用一个类加载器


文件过滤器

package day20191113;

import java.io.File;
import java.io.FileFilter;

public class Demo01 {
	public static void main(String[] args) {
		File file = new File("D:\\BaiDu\\BaiduNetdiskDownload\\MyNotes\\复习\\Collection&Map");
		if(file.isDirectory()) {
            //listFiles():返回file对象下的所有文件/目录(不包括目录下的内容)
			File[] files = file.listFiles(new FileFilter() {
				/**
				 * FileFilter是一个抽象类,使用匿名内部类的方式进行实例化
				 * file:要筛选的文件对象
				 * 返回值为true,表示该文件对象要保留;反之,表示该文件对象被过滤
				 */
				public boolean accept(File file) {
					// TODO Auto-generated method stub
					return file.getName().endsWith(".md");
				}
				
			});
			for(File f : files) {
				System.out.println(f.getName());
			}
		}
	}
}


案例:递归删除多级目录

package day20191113;

import java.io.File;

public class Demo02 {
	public static void main(String[] args) {
		DeleteFile deleteFile = new DeleteFile();
		deleteFile.doIt();
	}
}
class DeleteFile{
	
	public void doIt() {
		File file = new File("D:\\BaiDu\\BaiduNetdiskDownload\\MyNotes");
		delete(file);
	}
	public void delete(File file) {
		File[] files = file.listFiles();
		for(File f : files) {
			/**
			 * 如果是f是文件,则直接删除;如果不是文件,则进入递归
			 */
			if(f.isFile()) {
				f.delete();
			}else {
				delete(f);
			}
		}
		file.delete();
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章