zoukankan      html  css  js  c++  java
  • 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("复制失败");
    		}
    	}
    

      

  • 相关阅读:
    web网页端上传用户头像,后端获取后,返回路径给前端做展示
    获取时间戳后按要求转换为要使用的条件
    本地测试环境获取微信授权的,不用在手动跳过
    php批量压缩指定目录的图片,优点-比工具快好多陪。
    git 生成本地密钥
    商品活动抽奖概率算法
    thinkadmin-controller下面的api接口访问形式
    SpringMVC的请求和响应
    SpringMVC注解解析和项目配置
    SpringMVC 概述
  • 原文地址:https://www.cnblogs.com/gshao/p/10152784.html
Copyright © 2011-2022 走看看