• java.io.File 类的常用的方法


    1.直接看代码

    package File类详解;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.Arrays;
    
    public class Test {
    	public static void main(String[] args) throws IOException {
    //I. 构造方法   三个
    //		1. File(String pathName) ★★★ 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
    //		2. File(String parent,String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
    //		3. File(File parent,String child)   根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
    //	注意: 创建一个File对象并没有在磁盘上面创建一个文件(文件夹)   (""前面都加上一个“”)
    		File file =  new File("C:\Users\甘劭\Desktop\enen\你好\么么哒.txt");  //(此路径电脑真实存在)
    		File file1 = new File("G:/Users/AOC/Desktop/","HelloWorld111.txt");   //(此路径电脑不存在)
    		File file2 = new File(new File("C:\Users\甘劭\Desktop"),"么么哒.txt");
    		
    //II. 常用的方法:   注意: 这些方法需要File对象调用:根据File对象中的pathname来操作文件
    //		1.创建文件   boolean createNewFile()   如果文件已经存在,返回false;如果文件路径不存在,抛出IO异常				  
    		
    //		2.创建文件夹  boolean mkdir()  如果文件夹已经存在,返回false 如果路径不存在,返回false,没有抛出异常
    //				  boolean mkdirs()  如果路径不存在,会自动先创建路径所需的文件夹
    		
    //		3.删除文件和目录  boolean delete()  如果是删除文件夹,必须是空文件夹.  文件就直接删除
    //		4. 	String getName() 得到文件或者目录的名称;
    //		5.  String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
    
    //		6.判断系列方法
    // 			boolean	isDirectory() 判断是否是一个目录
    // 			boolean	isFile() 	判断是否是一个文件
    // 			boolean exists()  	测试此抽象路径名表示的文件或目录是否存在 
     		
    
    		System.out.println(file.exists());  //true
    		System.out.println(file1.exists());  //false
    		System.out.println(file.isFile());  //ture
    		System.out.println(file.isDirectory());  //false
    		
    //		7. 注意:listRoots()  list()  listFile()  的区别
    //		      static File[] listRoots():获取操作系统上的盘符文件对象数组 
    //			  File[] listFiles():获取当前文件夹对象下的所有子文件夹和子文件对象(File类型)的数组
    //		  	  String[] list(): 获取当前文件夹对象下的所有子文件夹和子文件名称(String)的数组
    		System.out.println(Arrays.toString(file.listRoots()));  // [C:\, E:\, F:]
    		
    		File file3 = new File("C:\Users\甘劭\Desktop\enen");
    		System.out.println(Arrays.toString(file3.list()));     //[你好, 我好]
    		System.out.println(Arrays.toString(file3.listFiles())); 
    		//[C:Users甘劭Desktopenen你好, C:Users甘劭Desktopenen我好]
    		
    //		8.其他方法 和字段
    //		file.getPath()获取文件对象的抽象路径
    //		file.getAbsolutePath()获取文件对象的绝对路径
    		
    //		file.length() 	★★★获取文件内的数据的长度
    //		file.getParentFile() ★★★获取父级文件夹对象
    		
    		System.out.println(file.getPath());    			//C:Users甘劭Desktopenen你好么么哒.txt
    		System.out.println(file.getAbsolutePath());     //C:Users甘劭Desktopenen你好么么哒.txt
    		
    		System.out.println(file.length());//获取文件内的数据的长度
    		File parent = file.getParentFile();//获取父级文件夹对象
    		System.out.println(parent.getPath());  //C:Users甘劭Desktopenen你好
    		
    		System.out.println(File.pathSeparator);//一种路径分隔符 ,返回的都是字符串类型。     //  ";"
    		System.out.println(File.separator);       //    ""     
    	}
    
    }
    

    2. 删除一个文件夹下的所有子文件夹和子文件(子文件夹中的子文件夹和子文件也需要除)

    package 删除一个文件夹下的所有子文件夹和子文件;
    /*
     *  自定义删除文件和文件夹
     */
    import java.io.File;
    
    public class Test {
    		public static void main(String[] args) {
    			File f = new File("C:\Users\甘劭\Desktop\enen");
    			//System.out.println(f.delete());//删除文件夹的时候的看该文件夹内是否为空,空文件夹直接删
    			deleteAll(f);//删除全部	
    		}
    
    		private static void deleteAll(File f) {
    			if(f !=null && f.exists()){
    				//判断对象是否为空   和  对象表示的抽象路径下是否真实存在文件
    				if(f.isFile()||f.listFiles().length ==0){
    					f.delete();//删除文件
    				}else{
    					//表示是个有东西的文件夹
    					File[] files = f.listFiles();
    					for (File file : files) {
    						deleteAll(file);
    					}
    					//System.out.println(f.getName()+"文件夹");
    					f.delete();//删除该有东西()的目录
    				}
    			}
    		}
    
    }
    

      

    3.统计文件夹下有多少个子文件夹和子文件(子文件夹中的子文件夹和子文件也需要统计)

    思路:用文件类型(后缀名不包含 “.”)作为key,   用个数作为value,   放入到map集合中

    public class Test {
    	public static void main(String[] args) {
    		File f  = new File("C:\Users\甘劭\Desktop\enen");
    		//map集合,文件类型名--key  ,  个数--values
    		Map<String,Integer> map = new HashMap();
    		getFileTypeCount(f, map); //调用方法获得结果存储在map集合中
    		
    		//遍历map
    		Set set = map.entrySet();
    		for (Object obj : set) {
    			Entry en = (Entry)obj;
    			System.out.println( en.getKey()+" "+en.getValue());
    		}
    	}
    //	
    	public static void getFileTypeCount(File f,Map<String,Integer> map){
    		File[] files  = f.listFiles(); // 获取f目录下的所有文件和文件夹
    
    		// 遍历对象数组
    		for (File file : files) {
    			
    			if(file.isFile()){
    				int index = file.getName().lastIndexOf(".");
    				String str  = file.getName().substring(index+1); //获取文件类型。
    				int nums = map.get(str)==null? 1 : map.get(str)+1;  //获取文件个数
    				map.put(str, nums);
    			}else if(file.isDirectory()){
    				getFileTypeCount(file,map); //如果是文件夹 继续递归调用
    			}
    		}
    	}
    
    }
    

     

    4.自定义文件过滤器

    public class Test {
    	public static void main(String[] args) {
    		//上传文件 指定一个目标目录  和允许上传的文件类型(只能判断当前目录下,文件夹里面的无从而知)
    			File file = new File("C:\Users\甘劭\Desktop\enen");//指定上传的目录
    			File[] files = upload(file,"html");
    			if(files.length != 0){
    				System.out.println("上传成功");
    				for (File file2 : files) {
    					System.out.println(file2.getName());
    				}
    			}else{
    				System.out.println("没有符合要求的文件可以上传");
    			}
    
    	}
    	private static File[] upload(File file, String string) {
    		ArrayList<File> lists = new ArrayList<>();//允许上传的文件对象保存在该集合内
    		
    		if(file.isDirectory()){
    			File[] files = file.listFiles();//获取当前目录下的所有子文件和子文件夹对象
    		
    			for (File f : files) {
    				if(f.isFile() && f.getName().endsWith(string)){
    					lists.add(f);
    				}
    			}
    		}
    		return lists.toArray(new File[lists.size()]);//将集合转换为对象数组
    	}
    
    }
    

      

    5.封装好的  FilenameFilter  和 FileFilter  过滤器接口

      FilenameFilter 接口      FileFilter接口
       * 接口方法:
         * boolean accept(File dir,String name) 可以使用此方法列出指定目录下面的带有某些后缀的文件。 
          参数:
            dir - 被找到的文件所在的目录。
            name - 文件的名称。 
          返回:
            当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false。

    public class Test implements FilenameFilter {
    	private String  key;//允许上传的文件后缀名称
    	public Test() {}
    	
    	public String getKey() {
    		return key;
    	}
    	public void setKey(String key) {
    		this.key = key;
    	}
    	@Override
    	public boolean accept(File dir, String name) {
    		return name.endsWith(key);//判断指定的文件名称的后缀名是不是key,如果是key 添加到文件列表中
    	}
    //进行测试  
    	public static void main(String[] args) {
    		File file = new File("C:\Users\甘劭\Desktop\enen");
    		Test mf = new Test();
    		mf.setKey("html");//设置能够保存
    		String[] names = file.list(mf);//传递一个文件过滤器
    		System.out.println(Arrays.toString(names));
    	}
    }
    

     

    6. 复制文件夹 (

    public static void copyFolder(String sourcePath,String targetPath){
    		try {
    			(new File(targetPath)).mkdirs();//若没有文件夹就创建一个
    			
    			File file = new File(sourcePath);
    			String[] files = file.list();
    			File temp = null;
    			for (int i = 0; i < files.length; i++) {
    				if(sourcePath.endsWith(File.separator)){
    					temp = new File(sourcePath+files[i]);
    				}else{
    					temp = new File(sourcePath+"/"+files[i]);
    				}
    				
    				if(temp.isFile()){
    					FileInputStream fis = new FileInputStream(temp);
    					FileOutputStream fos = new FileOutputStream(targetPath+"/"+temp.getName().toString());
    					byte[] b = new byte[1024*5];
    					int len = -1;
    					while ((len = fis.read(b))!=-1) {
    						fos.write(b, 0, len);
    					}
    					fos.flush();
    					fos.close();
    					fis.close();
    				}
    				if(temp.isDirectory()){
    					copyFolder(sourcePath+"/"+files[i],targetPath+"/"+files[i]);
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    			System.out.println("复制失败");
    		}
    	}
    

      

  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/gshao/p/10152784.html
Copyright © 2020-2023  润新知