目录
1. exists、isDirectory、getName、length、lastModified、getPath、getAbsolutePath
一、File类和IO流的区别
1. 数据长久保存,即使断电也不会丢失:File 是java.io.包下的类,用于代表当前操作系统的文件(可以是文件、或文件夹)
2. File 类只能对文件本身进行操作(eg: 获取文件大小,文件名,修改时间,判断文件类型,创建文件/文件夹,删除文件/文件夹…),不能读写文件里存储的数据
3. IO 流,用于读写数据的
public static void main(String[] args) {
// 1. 创建一个File 对象,指代某个具体文件
//路径分隔符
//File f1 = new File("D:/test/nhao.txt");
File f1 = new File("D:" + File.separator + "test" + File.separator + "nhao.txt");
//File f1 = new File("D:\\test\\nhao.txt"); 要有两个“\\”,防止读取错误
System.out.println(f1.length()); //文件大小
//定位模块中的文件
//绝对路径
//File f2 = new File("E:\\developcode\\javacode\\javabase\\src\\com\\aboutFile\\test");
//相对路径 不带盘符 默认直接去工程下面找
File f2 = new File("javabase\\src\\com\\aboutFile\\test");
System.out.println(f2.length());
//File 对象可以指向一个不存在的文件路径
File f3 = new File("D:/java");
System.out.println(f3.length()); //0
System.out.println(f3.exists());// false
}
二、对File类的操作
1. exists、isDirectory、getName、length、lastModified、getPath、getAbsolutePath
public static void main(String[] args) {
//1. 创建文件对象,指代某个文件
File f2= new File("src\\com\\aboutFile\\test");
File f1 = new File("D:/test/nhao.txt");
// 判断当前文件是否存在
System.out.println(f2.exists());
//判断当前文件是否是文件夹
System.out.println(f2.isDirectory());
//获取文件名称(包含后缀)
System.out.println(f2.getName());
//获取文件大小,返回字节个数
System.out.println(f2.length());
//获取文件最后的修改时间
long time = f2.lastModified();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
System.out.println(sdf.format(time));
//创建文件对象时,使用的路径
System.out.println(f1.getPath());
System.out.println(f2.getPath());
//获取绝对路径
System.out.println(f1.getAbsolutePath());
System.out.println(f2.getAbsolutePath());
}
2. 创建文件与删除文件
tip: delete 方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站!!!
public static void main(String[] args) throws IOException {
//创建一个新文件,文件内容为空,创建成功则返回true
File f1 = new File("D:/test/itheima.txt");
System.out.println(f1.createNewFile()); //true
//创建文件夹,只能创建一级文件夹
File f2 = new File("D:/test/aaa");
System.out.println(f2.mkdir()); //true
//创建文件夹,可以创建多级文件夹
File f3 = new File("D:/test/aaa/bbb/ddd/eee");
System.out.println(f3.mkdirs()); //true
//删除文件,或者空文件,不能删除非空文件夹
// 这个方法只能删除单个文件或空目录。如果目录非空,即包含文件或其他目录,delete() 方法将返回 false,并且不会删除该目录
System.out.println(f1.delete()); // true
System.out.println(f2.delete()); //false
File f4 = new File("D:/test");
System.out.println(f4.delete()); // f4非空,false
}
3. File 文件夹的遍历方法
1. 当主调是文件,或者是路径不存在,或者没有权限访问该文件夹,返回null;
2. 主调是空文件,返回一个长度为0的数组;
3. 主调是一个有内容的文件夹,会把里面的一级文件夹和文件(包含隐藏文件)放到一个File数组中返回;
public static void main(String[] args) {
// 1. 获取当前目录下所有的一级文件名称到一个字符串数组中去返回
File f1 = new File("D:\\唧唧down");
String[] names = f1.list();
for (String name : names) {
System.out.println(name);
}
// 2. listFiles() 获取当前目录下所有的一级文件夹到一个文件对象数组中去返回(重点)
File[] files = f1.listFiles();
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
4. 文件搜索
1. 递归知识
递归的形式:直接递归,方法自己调用自己;间接递归:方法调用其他方法,其他方法又回调方法自己;
递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误
public static void main(String[] args) {
/*猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个第二天又吃了前天剩余桃子数量的一半,觉得好不过瘾,于是又多吃了一个以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个等到第10天的时候发现桃子只有1个了。需求:请问猴子第一天摘了多少个桃子?*/
// f(10) = 1
// 公式: f(x) - f(x) /2 -1 = f(x + 1)
//变形: 2f(x) - f(x) - 2 = 2f(x + 1)
// f(x) = 2*f(x + 1) + 2
//求f(1) = ?
System.out.println(f(1)); //1534
System.out.println(f(2)); //766
}
public static int f(int x) {
if (x == 10){
return 1;
}else {
return 2*f(x + 1) + 2;
}
}
2. 递归应用——文件搜索
public static void searchFile(File dir,String fileName) throws IOException {
if (dir == null || !dir.exists() || dir.isFile()){
return;// 代表无法搜索
}
// dir不是null,存在,一定是目录对象
File[] f1 = dir.listFiles();
// 判断当前目录下是否存在一级文件夹,以及是否可以拿到一级文件夹
if (f1 != null && f1.length > 0) {
for (File file : f1) {
//
if (file.isFile()) {
if (file.getName().contains(fileName)){
System.out.println("找到了!" + file.getAbsolutePath());
Runtime runtime = Runtime.getRuntime();
runtime.exec(file.getAbsolutePath());
}
}else {
searchFile(file,fileName);
}
}
}
}
5. 删除非空文件夹
public static void deleteFile(File dir) {
if (dir == null || !dir.exists() || dir.isFile()) {
return;
}
//dir不是null,存在,一定是目录对象
File[] f1 = dir.listFiles();
if (f1 == null) {
return;
}
if (f1.length == 0) {
dir.delete();
return;
}
//删除非空文件
for (File file : f1) {
if (file.isFile()) {
file.delete();
System.out.println("删除成功!!!");
}else {
deleteFile(file);
}
}
//最后全部遍历完,删除文件夹
System.out.println(dir.delete());
}