• Java I/O学习——File


    File我们出看可能会根据字面意思理解为文件,其实它既代表文件又代表目录。

    这里有一个例子可以列出指定目录下的所有文件或目录, 以及我们可以过滤得到我们想要的文件

    import java.io.File;
    import java.io.FilenameFilter;
    import java.lang.ref.PhantomReference;
    import java.lang.ref.Reference;
    import java.lang.ref.ReferenceQueue;
    import java.lang.ref.SoftReference;
    import java.lang.ref.WeakReference;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.HashSet;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Set;
    import java.util.regex.Pattern;
    
    
    class DirFilter implements FilenameFilter{
    
    	private Pattern pattern;
    	public DirFilter(String regex){
    		pattern = Pattern.compile(regex);
    	}
    	@Override
    	public boolean accept(File dir, String name) {
    		return pattern.matcher(name).matches();
    	}
    	
    }
    public class Test{
    
    	public static void main(String[] args) {
    		File path = new File("/home/estar/Test");
    		
    		String[] list = path.list();
    		System.out.println("输出全部文件或目录:");
    		for (String s : list) {
    			System.out.println(s);
    		}
    		System.out.println("输出以.java结尾的文件或目录");
    		list = path.list(new DirFilter(".*\.java"));  //只列出以.java结尾的文件
    		for (String s : list) {
    			System.out.println(s);
    		}
    		
    		System.out.println("匿名内部类实现");
    		list = path.list(new FilenameFilter() {
    			
    			@Override
    			public boolean accept(File dir, String name) {
    				Pattern pattern = Pattern.compile(".*\.java");
    				return pattern.matcher(name).matches();
    			}
    		});
    		for (String s : list) {
    			System.out.println(s);
    		}
    	}
    }
    输出:
    输出全部文件或目录:
    a.java
    cd
    e.txt
    b.java
    c.java
    d.java
    输出以.java结尾的文件或目录
    a.java
    b.java
    c.java
    d.java
    匿名内部类实现
    a.java
    b.java
    c.java
    d.java
    

      

     更加实用的工具类:

    import java.io.File;
    import java.io.FilenameFilter;
    import java.io.ObjectInputStream.GetField;
    import java.lang.ref.PhantomReference;
    import java.lang.ref.Reference;
    import java.lang.ref.ReferenceQueue;
    import java.lang.ref.SoftReference;
    import java.lang.ref.WeakReference;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Set;
    import java.util.regex.Pattern;
    
    
    class FileUtils{
    	//获得本地指定目录下的,指定格式的目录列表
    	public static File[] local(File dir, final String regex) {
    		return dir.listFiles(new FilenameFilter() {
    			Pattern pattern = Pattern.compile(regex);
    			@Override
    			public boolean accept(File dir, String name) {
    				return pattern.matcher(new File(name).getName()).matches();
    			}
    		});
    	}
    	public static File[] local(String dir, String name) {
    		return local(new File(dir), name);
    	}
    	
    	
    	public static class TreeInfo implements Iterable<File> {
    
    		List<File> files = new ArrayList<File>();
    		List<File> dirs = new ArrayList<File>();
    		public void addAll(TreeInfo info) {
    			files.addAll(info.files);
    			dirs.addAll(info.dirs);
    		}
    		
    		@Override
    		public Iterator<File> iterator() {
    			return files.iterator();
    		}
    		@Override
    		public String toString() {
    			return files.toString() + "
    " + dirs.toString();
    		}
    	}
    	
    	//得到所有目录
    	public static TreeInfo getInfo(String path, String regex) {
    		return recurseDirs(new File(path), regex);
    	}
    	public static TreeInfo getInfo(File path, String regex) {
    		return recurseDirs(path, regex);
    	}
    	public static TreeInfo getInfo(String path) {
    		return recurseDirs(new File(path), ".*");
    	}
    	public static TreeInfo getInfo(File path) {
    		return recurseDirs(path, ".*");
    	}
    	
    	
    	//递归调用然后获得信息
    	public static TreeInfo recurseDirs(File startDir, String regex){
    		TreeInfo result = new TreeInfo();
    		for (File item : startDir.listFiles()) {
    			if (item.isDirectory()) {
    				result.dirs.add(item);
    				result.addAll(recurseDirs(item, regex));
    			} else {
    				//System.out.println("item : = " + item);
    				if (item.getName().matches(regex)) {
    					result.files.add(item);
    				}
    			}
    		}
    		return result;
    	}
    }
    public class Test{
    
    	public static void main(String[] args) {
    		System.out.println(Arrays.asList(FileUtils.local(new File("/home/estar/Test"), ".*\.java")));
    		System.out.println("指定目录下的所有目录:");
    		System.out.println(FileUtils.getInfo(new File("/home/estar/Test")).dirs);
    		System.out.println("指定目录下的所有文件:");
    		System.out.println(FileUtils.getInfo("/home/estar/Test").files);
    		System.out.println("指定目录下的所有内容:");
    		System.out.println(FileUtils.getInfo("/home/estar/Test"));
    		
    		System.out.println("指定目录下的,特定文件:");
    		System.out.println(FileUtils.getInfo(new File("/home/estar/Test"), ".*\.java").files);
    		
    		
    	}
    }
    
    输出:
    [/home/estar/Test/a.java, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java]
    指定目录下的所有目录:
    [/home/estar/Test/cd]
    指定目录下的所有文件:
    [/home/estar/Test/a.java, /home/estar/Test/cd/q.java, /home/estar/Test/e.txt, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java]
    指定目录下的所有内容:
    [/home/estar/Test/a.java, /home/estar/Test/cd/q.java, /home/estar/Test/e.txt, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java]
    [/home/estar/Test/cd]
    指定目录下的,特定文件:
    [/home/estar/Test/a.java, /home/estar/Test/cd/q.java, /home/estar/Test/b.java, /home/estar/Test/c.java, /home/estar/Test/d.java]
    

      

  • 相关阅读:
    day46 mysql进阶
    解决:ping github.com遇到“请求超时”
    修改hosts文件
    Python正课135 —— 基础扩展1
    Python正课136 —— 基础扩展2
    05 树莓派安装Python3.6
    一次可以面向百度的笔试
    作业23
    获取类名和方法名
    面向对象三大特性之继承
  • 原文地址:https://www.cnblogs.com/E-star/p/3442288.html
Copyright © 2020-2023  润新知