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();
}
}