JAVA学习——File类

目录

一、File类和IO流的区别

二、对File类的操作

1. exists、isDirectory、getName、length、lastModified、getPath、getAbsolutePath

 2. 创建文件与删除文件

 3. File 文件夹的遍历方法

4. 文件搜索

 5. 删除非空文件夹


 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值