• Java——File类,递归


    一、File类

    获取路径或目录分隔符

    public static void main(String[] args) {
    	//File类静态成员变量
    	//与系统有关的路径分隔符
    	String separator = File.pathSeparator;
    	System.out.println(separator);// 是一个分号,目录的分割   Linux :
    	
    	//与系统有关的默认名称分隔符
    	separator = File.separator;
    	System.out.println(separator);// 向右   目录名称分割  Linux / 
    }

    1、3种构造方式

    /*
     *  File(File parent,String child)
     *  传递路径,传递File类型父路径,字符串子路径
     *  好处: 父路径是File类型,父路径可以直接调用File类方法
     */
    public static void function_2(){
    	File parent = new File("d:");
    	File file = new File(parent,"eclipse");
    	System.out.println(file);
    }
    
    /*
     *  File(String parent,String child)
     *  传递路径,传递字符串父路径,字符串子路径
     *  好处: 单独操作父路径和子路径
     */
    public static void function_1(){
    	File file = new File("d:","eclipse");
    	System.out.println(file);
    }
    
    /*
     *  File(String pathname)
     *  传递路径名: 可以写到文件夹,可以写到一个文件
     *  c:\abc   c:\abc\Demo.java
     *  将路径封装File类型对象
     */
    public static void function(){
    	File file = new File("d:\eclipse");
    	System.out.println(file);
    }
    

    2、创建文件

    /*
     *  File创建文件的功能
     *  boolean createNewFile()
     *  创建的文件路径和文件名,在File构造方法中给出
     *  文件已经存在了,不再创建,返回值为false
     */
    public static void function()throws IOException{
    	File file = new File("c:\a.txt");
    	boolean b = file.createNewFile();
    	System.out.println(b);
    }
    

    3、创建文件夹

    /*
     *  File创建文件夹功能
     *  boolean mkdirs() 创建多层文件夹
     *  创建的路径也在File构造方法中给出
     *  文件夹已经存在了,不再创建,返回值为false
     */
    public static void function_1(){
    	File file = new File("c:\abc");
    	boolean b = file.mkdirs();
    	System.out.println(b);
    }
    

    4、删除文件和文件夹

    /*
     *  File类的删除功能
     *  boolean delete()
     *  删除的文件或者是文件夹,在File构造方法中给出
     *  删除成功返回true,删除失败返回false
     *  删除方法,不走回收站,直接从硬盘中删除
     *  删除有风险,运行需谨慎
     */
    public static void function_2(){
    	File file = new File("c:\a.txt");
    	boolean b = file.delete();
    	System.out.println(b);
    }
    

    5、获取文件或文件夹的名字

    /*
     *  File类的获取功能
     *  String getName()
     *  返回路径中表示的文件或者文件夹名
     *  获取路径中的最后部分的名字
     */
    public static void function(){
    	File file = new File("d:\eclipse\eclipse.exe");
    	String name = file.getName();
    	System.out.println(name);
    }
    

    6、获取文件中的字节数

    /*
     * File类获取功能
     * long length()
     * 返回路径中表示的文件的字节数
     */
    public static void function_1(){
    	File file = new File("d:\eclipse\eclipse.exe");
    	long length = file.length();
    	System.out.println(length);
    }
    

    7、获取绝对路径

    /*
     * File类获取功能
     * String getAbsolutePath() 返回String对象
     * File   getAbsoluteFile() 返回File对象
     */
    public static void function_2(){
    	File file = new File("src");
    	File absolute = file.getAbsoluteFile();
    	System.out.println(absolute);
    }
    

    8、获取父路径

    /*
     * File类的获取功能
     * String getParent() 返回String对象
     * File getParentFile()返回File对象
     * 获取父路径
     */
    public static void function_3(){
    	File file = new File("d:\eclipse\eclipse.exe");
    	File parent = file.getParentFile();
    	System.out.println(parent);
    }
    

    9、判断路径是否存在

    /*
     *  File判断功能
     *  boolean exists()
     *  判断File构造方法中封装路径是否存在
     *  存在返回true,不存在返回false
     */
    public static void function(){
    	File file = new File("src");
    	boolean b = file.exists();
    	System.out.println(b);
    }
    

    10、判断是否为文件/文件夹

    /*
     *  File判断功能
     *  boolean isDirectory()
     *  判断File构造方法中封装的路径是不是文件夹
     *  如果是文件夹,返回true,不是文件返回false
     *  
     *  boolean isFile()
     *  判断File构造方法中封装的路径是不是文件
     */
    public static void function_1(){
    	File file = new File("d:\eclipse\eclipse.exe");
    	if(file.exists()){
    		boolean b = file.isDirectory();
    		System.out.println(b);
    	}
    }
    

    11、遍历目录下所有文件

    /*
     *  File类的获取功能
     *  File[] listFiles()
     *  获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
     *  返回的是目录或者文件的全路径
     */
    public static void function_1(){
    	File file = new File("d:\eclipse");
    	File[] fileArr = file.listFiles();
    	for(File f : fileArr){
    		System.out.println(f);
    	}
    }
    
    /*
     *  File类的获取功能
     *  String[] list()
     *  获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
     *  返回只有名字
     */
    public static void function(){
    	File file = new File("c:");
    	String[] strArr = file.list();
    	System.out.println(strArr.length);
    	for(String str : strArr){
    		System.out.println(str);
    	}
    }
    

    12、文件过滤器

    需要我们自己写一个过滤器

    import java.io.File;
    import java.io.FileFilter;
    
    /*
     *  自定义过滤器
     *  实现FileFilter接口,重写抽象方法
     */
    public class MyFilter implements FileFilter{
    	public boolean accept(File pathname)  {
    		/*
    		 * pathname 接受到的也是文件的全路径
    		 * c:\demo\1.txt
    		 * 对路径进行判断,如果是java文件,返回true,不是java文件,返回false
    		 * 文件的后缀结尾是.java
    		 */
    		//String name = pathname.getName();
    		return pathname.getName().endsWith(".java");
    		
    	}
    }
    

    然后在listfiles中添加它的匿名对象

    import java.io.File;
    
    /*
     *  File类的获取,文件获取过滤器
     *  遍历目录的时候,可以根据需要,只获取满足条件的文件
     *  遍历目录方法 listFiles()重载形式
     *  listFiles(FileFilter filter)接口类型
     *  传递FileFilter接口的实现类
     *  自定义FileFilter接口实现类,重写抽象方法,
     *  接口实现类对象传递到遍历方法listFiles
     */
    public class FileDemo1 {
    	public static void main(String[] args) {
    		File file = new File("c:\demo");
    		File[] fileArr = file.listFiles(new MyFilter());
    		for(File f : fileArr){
    			System.out.println(f);
    		}
    	}
    }
    

    二、递归

    示例:

    /*
     *  方法的递归调用
     *    方法自己调用自己
     *  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化
     *  注意:
     *     递归一定要有出口, 必须可以让程序停下
     *     递归次数不能过多
     *     构造方法,禁止递归
     */
    public class DiGuiDemo {
    	public static void main(String[] args) {
    		/*int sum = getSum(3);
    		System.out.println(sum);*/
    		System.out.println(getJieCheng(5));
    		System.out.println(getFBNQ(12));
    	}
    	/*
    	 *  方法递归,计算斐波那契数列
    	 *  
    	 */
    	public static int getFBNQ(int month){
    		if( month == 1)
    			return 1;
    		if( month == 2)
    			return 1;
    		return getFBNQ(month-1)+getFBNQ(month-2);
    	}
    	
    	/* 
    	 *  计算阶乘 5!
    	 *   5*4*3*2*1
    	 */
    	public static int getJieCheng(int n){
    		if ( n == 1)
    			return 1;
    		return n * getJieCheng(n-1);
    	}
    			
    	/*
    	 *  计算 1+2+3+100和 = 5050
    	 *  计算规律:
    	 *    n+(n-1)+(n-2)
    	 *    100+(100-1)+(99-1)+...1
    	 */
    	public static int getSum(int n){
    		if( n == 1)
    			return 1;
    		return n + getSum(n-1);
    	}
    	
    }
    

    如果我们想遍历目录下所有的文件,就可以用这种方法

    /*
     *  定义方法,实现目录的全遍历
     */
    public static void getAllDir(File dir){
    	System.out.println(dir);
    	//调用方法listFiles()对目录,dir进行遍历
    	File[] fileArr = dir.listFiles();
    	for(File f : fileArr){
    		//判断变量f表示的路径是不是文件夹
    		if(f.isDirectory()){
    			//是一个目录,就要去遍历这个目录
    			//本方法,getAllDir,就是给个目录去遍历
    			//继续调用getAllDir,传递他目录
    			getAllDir(f);
    		}else{
    			System.out.println(f);
    		}
    	}
    }
    
  • 相关阅读:
    UVA11174村民排队问题
    UVA11174村民排队问题
    UVA11137(立方数之和)
    UVA11137(立方数之和)
    UVA11134传说中的车(放棋子)
    UVA11134传说中的车(放棋子)
    UVA11100旅行(大包装小包,问最少多少个包)
    UVA11100旅行(大包装小包,问最少多少个包)
    UVA11078开放式学分制(前面-后面的最大值)
    UVA11078开放式学分制(前面-后面的最大值)
  • 原文地址:https://www.cnblogs.com/x54256/p/8436580.html
Copyright © 2020-2023  润新知