• java基础9(IO流)-File类


    File类

    File:文件和目录路径名的抽象表示形式。即java中把文件或者目录都封装成File对象

    代码练习1

    import java.io.File;
    
    public class FileDemo1{
    	public static void main(String[] args){
    	         //将路径封装成一个file对象
    		File file = new File("/home/hadoop/javatest/wujiadong1.txt");
    		System.out.println(file);
    	}
    }
    ---------------------------------------
    输出结果
    /home/hadoop/javatest/wujiadong1.txt
    ---------------------------------------
    

    File类构造方法

    image

    代码练习2

    import java.io.File;
    
    public class FileDemo1{
    	public static void main(String[] args){
    		//方式1
    		File file1 = new File("/home/hadoop/javatest/wujiadong1.txt");
    		//方式2
    		File file2 = new File("/home/hadoop/javatest","wujiadong1.txt");
    		//方式3
    		File file3 = new File("/home/hadoop/javatest");
    		File file4 = new File(file3,"wujiadong1.txt");
    	
    		System.out.println(file1);
    		System.out.println(file2);
    		System.out.println(file3);
    		System.out.println(file4);
    	}
    }
    -----------------------------------------------
    输出结果
    /home/hadoop/javatest/wujiadong1.txt
    /home/hadoop/javatest/wujiadong1.txt
    /home/hadoop/javatest
    /home/hadoop/javatest/wujiadong1.txt
    -----------------------------------------------------
    
    

    创建功能

    代码练习3

    import java.io.File;
    import java.io.IOException;
    
    public class FileDemo{
    	public static void main(String[] args) throws IOException {
    		//根据一个路径得到File对象
    		File file = new File("/home/hadoop/a.txt");
    		File file2 =new File("/home/hadoop","b.txt"); 
    		File file3 = new File("/home/hadoop");
    		File file4 = new File(file3,"c.txt");
    
    		File file5 = new File("/home/hadoop/aaa");
    		File file6 = new File("/home/hadoop/bbb/ccc/ddd");	
    	
    	         //创建文件
    		System.out.println(file.createNewFile());	
    		System.out.println(file2.createNewFile());
    		System.out.println(file4.createNewFile());
    
    		System.out.println(file5.mkdir());//创建一级目录
    		System.out.println(file6.mkdirs());//创建多级目录
    	}
    }
    
    

    删除功能

    代码练习4

    import java.io.File;
    import java.io.IOException;
    
    public class FileDemo{
    	public static void main(String[] args) throws IOException {
    		//根据一个路径得到File对象
    		File file = new File("/home/hadoop/a.txt");
    
    		file.delete();//注意只能删除文件或单级目录
    	}
    }
    
    
    
    

    重命名功能

    代码练习5

    import java.io.File;
    import java.io.IOException;
    
    public class FileDemo{
    	public static void main(String[] args) throws IOException {
    		//根据一个路径得到File对象
    		File file = new File("/home/hadoop/a.txt");
    		file.createNewFile();
    
    		File file1 = new File("/home/hadoop/wujiadong.txt");
    		file.renameTo(file1);
    	}
    }
    
    

    判断功能

    代码练习6

    import java.io.File;
    import java.io.IOException;
    
    public class FileDemo{
    	public static void main(String[] args) throws IOException {
    		//根据一个路径得到File对象
    		File file = new File("/home/hadoop/a.txt");
    		file.createNewFile();
    
    		File file1 = new File("/home/hadoop/wujiadong.txt");
    		file.renameTo(file1);
    
    		System.out.println("isDirectory:"+file1.isDirectory());
    		System.out.println("isFile:"+file1.isFile());
            System.out.println("exists:"+file1.exists());
            System.out.println("canRead:"+file1.canRead());
            System.out.println("canWrite:"+file1.canWrite());
            System.out.println("isHidden:"+file1.isHidden());
    	}
    }
    -----------------------------------
    输出结果
    isDirectory:false
    isFile:true
    exists:true
    canRead:true
    canWrite:true
    isHidden:false
    ----------------------------------
    
    
    

    获取功能

    代码练习7

    import java.io.File;
    import java.io.IOException;
    
    public class FileDemo{
    	public static void main(String[] args) throws IOException {
    		//根据一个路径得到File对象
    		File file = new File("/home/hadoop/a.txt");
    		file.createNewFile();
    
    		System.out.println("getAbsolutePath:"+file.getAbsolutePath());//绝对路径
    		System.out.println("getPath:"+file.getPath());//相对路径
            System.out.println("getName:"+file.getName());//名称
            System.out.println("length:"+file.length());//大小
            System.out.println("lastModified:"+file.lastModified());//获取最后一次修改时间,毫秒值
    	}
    }
    -------------------------------
    输出结果
    getAbsolutePath:/home/hadoop/a.txt
    getPath:/home/hadoop/a.txt
    getName:a.txt
    length:0
    lastModified:1480772014000
    ---------------------------------
    
    

    高级获取功能(重点)

    代码练习8

    import java.io.File;
    
    public class FileDemo{
    	public static void main(String[] args){
    		//指定一个目录
    		File file = new File("/home/hadoop/javatest");
    		
    		//public String[] list():获取指定目录下的所有文件夹的名称数组
    		String[] strArray = file.list();//只列出文件名称
    		
    		for(String s:strArray){
    			System.out.println(s);
    		}
    
    		System.out.println("---------");
    
    		//public File[] listFiles():获取指定目录下的所有文件夹的File数组
    		File[] fileArray = file.listFiles();//文件详细路径和名称
    		for(File f:fileArray){
    			System.out.println(f.getName());
    		}
    	}
    }
    
    
    
    

    练习:判断目录/home/hadoop下是否有后缀名为.txt的文件,如果有,就输出此文件名称

    代码练习9

    /*
     * 判断目录/home/hadoop下是否有后缀名为.txt的文件,如果有,就输出此文件名称
     * 封装目录;遍历文件或目录;判断获取到的是否是文件;是否以.txt结尾 
     
     */
    
    import java.io.File;
    
    public class FileDemo1{
    	public static void main(String[] args){
    		File file = new File("/home/hadoop");
    
    		//获取该目录下所有文件或者文件夹的File数组
    		File[] fileArray = file.listFiles();
    
    		for(File f:fileArray){
    			//判断是否是文件
    			if(f.isFile()){
    				//判断是否以.txt结尾
    				if(f.getName().endsWith(".txt")){
    					System.out.println(f.getName());
    				}	
    			}
    		}
    	}
    }
     
    -------------------------------------------------
    输出结果
    c.txt
    b.txt
    a.txt
    wujiadong.txt
    -----------------------------------------------
    
    

    代码练习10
    方法二(使用过滤器)

    import java.io.File;
    import java.io.FilenameFilter;
    
    public class FileDemo1{
    	public static void main(String[] args){
    		File file = new File("/home/hadoop");
    		
    		File[] fileArr = file.listFiles(new MyFileFilter());//传递过滤器
    		for(File f:fileArr){
    			System.out.println(f);
    		}
    	}
    }
    
    //自定义类继承FilenameFilter过滤器接口
    class MyFileFilter implements FilenameFilter{
    	public boolean accept(File dir,String name){
    		return name.endsWith(".txt");
    	}
    }
    
    
    
    

    练习:获取/home/hadoop下的所有文件夹(过滤器)

    import java.io.File;
    import java.io.FileFilter;
    
    public class FileDemo1{
    	public static void main(String[] args){
    		File file = new File("/home/hadoop");
    		
    		File[] fileArr = file.listFiles(new FileFilterByDir());//获取指定目录下的文件夹
    		for(File f:fileArr){
    			System.out.println(f);
    		}
    	}	
    }
    
    
    class FileFilterByDir implements FileFilter{
    	public boolean accept(File pathname){
    		return pathname.isDirectory();
    	}
    }
    
    

    FilenameFilter与FileFilter的比较

    • FilenameFilter过滤器中的accept方法接受两个参数,一个是当前文件夹或文件夹所在路径,一个是当期文件或文件夹对象的名称
    • FileFilter过滤器中的accept方法接受一个参数,这个参数是当期文件或文件夹对象
    • 当需过滤文件名称时使用FilenameFilter;当需对当前文件或文件夹进行过滤,就可以使用FileFilter

    练习:批量修改文件名

    
    
    

    练习:递归输出指定目录下所有以.java格式结尾的文件

    代码练习10

    import java.io.File;
    public class FilePathDemo{
    	public static void main(String[] args){
    		//封装目录
    		File srcFolder = new File("/home/hadoop/javatest");
    		getAllFilePath(srcFolder);
    	}
    		//递归功能
    	private static void getAllFilePath(File srcFolder){
    		File[] fileArray = srcFolder.listFiles();			
    
    		//遍历
    		for(File file:fileArray){
    			if(file.isDirectory()){
    				getAllFilePath(file);	
    			}else{
    				if(file.getName().endsWith(".java")){
    					System.out.println(file.getAbsolutePath());
    				}
    			}
    		}
    	}
    	
    }
    
    
    
    

    练习:递归删除带内容的目录

    代码练习11

    import java.io.File;
    
    public class FileDeleteDemo1{
    	public static void main(String[] args){
    		//封装目录
    		File srcFolder = new File("/home/hadoop/javatest/test");
    		
    		deleteFolder(srcFolder);
    	}
    
    	private static void deleteFolder(File srcFolder){
    		//获取所有文件或目录
    		File[] fileArray = srcFolder.listFiles();
    		
    		//遍历
    		for(File file:fileArray){
    			if(file.isDirectory()){
    				deleteFolder(file);
    			}else{
    				System.out.println("file.getName():"+file.delete());
    			}
    		}
    
    		System.out.println("srcFolder.getName()"+srcFolder.delete());
    	}
    
    }
    
    -------------------------------
    这里需要注意的是fileArray不能等于null。
    可以加入判断if(fileArray != null){}
    
    
    
    

    递归:指在当前方法内调用自己的这种现象

    public void show(){
        show();
    
    }
    
    

    注意事项

    • 递归一定要有限制条件
    • 递归次数不能太多
    • 构造方法不能递归使用
  • 相关阅读:
    Laravel Passport token过期后判断refresh_token是否过期
    js 数组随机排序
    jquery的animate关于background-position属性
    css hack 汇整
    顶部导航--向上滚动的时候出现,向下滚动的时候隐藏
    手机端全局样式表整理(mobile)
    AR专用汉明码
    css常用命名规则
    晚11点
    当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值。
  • 原文地址:https://www.cnblogs.com/wujiadong2014/p/6151798.html
Copyright © 2020-2023  润新知