zoukankan      html  css  js  c++  java
  • 实现类:在给定目录下搜索包含给定关键字的文件和文件夹

    在写SeekFile类之前学习了下File类,熟悉了下用到的几个类的用法。
    接近尾声的时候,被异常所困扰。在不断调试中,终于发现,在E:\下有隐藏文件夹,导致抛出异常(见标记处):
    Exception in thread "main" java.lang.NullPointerException
    最后把 if (listPathNameArray[index].isDirectory())
    修改为 if (listPathNameArray[index].isDirectory() && !listPathNameArray[index].isHidden())后终于正常了。
    java.lang.NullPointerException异常(空指针异常):
    指当应用程序试图在需要对象的地方使用null时,抛出空指针异常。这种情况包括调用了未被初始化的对象或不存在的对象。
    //
    再次寻找抛出空指针异常的原因,目标锁定在文件夹/文件访问权限上(PS:我的是win7系统)。先mark一下。
    //
    import java.io.File;
    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Vector;
    
    /**
     * SeekFile类:在给定目录下搜索包含给定关键字的文件和文件夹
     */
    public class SeekFile/* implements Filter */
    {
    	private String pathname;			// 指定目录
    	private CharSequence charSequence;	// 指定关键字
    	private Vector<File> listFitFileArray = new Vector<File>();	// 符合要求的文件名
    	
    	public SeekFile()
    	{}
    	
    	public SeekFile(String pathname, CharSequence charSequence)
    	{
    		this.pathname = pathname;
    		this.charSequence = charSequence;
    	}
    	
    	// 得到符合要求的路径名数组
    	public Vector<File> getTheFitFileName()
    	{
    		BreadthFirstSearch();		// 调用广搜方法
    		
    		return listFitFileArray;	// 返回最终结果
    	}
    	
    	// 广搜
    	private void BreadthFirstSearch()
    	{
    		Queue<String> queue = new LinkedList<String>();
    		
    		queue.add(pathname);
    		
    		while (0 != queue.size())
    		{
    			File newPathname = new File(queue.remove());		// 当前目录
    			File[] listPathNameArray = newPathname.listFiles();	// 把当前目录下的file和directory存到数组
    			
    			SelectTheFitFileNameWithSuffix(listPathNameArray);	// 挑选符合要求的file的路径名
    				
    			// 目录入队
    			for (int index = 0; index < listPathNameArray.length; index++)
    			{
    				if (!listPathNameArray[index].isHidden()		// 筛选目录且非隐藏
    						&&listPathNameArray[index].isDirectory()) 	// 是否是一个目录
    				{
    					queue.offer(listPathNameArray[index].toString());	// 这句一直引起异常,标记下
    				}
    			}
    		}
    	}
    	
    	// 挑选符合要求的路径名
    	private void SelectTheFitFileNameWithSuffix(File[] listPathNameArray)
    	{
    		for (int index = 0; index < listPathNameArray.length; index++)
    		{
    			if (listPathNameArray[index].isFile() 			// 是一个标准文件
    					&& !listPathNameArray[index].isHidden()	// 非隐藏
    					&& listPathNameArray[index].toString().contains(charSequence))	// 包含关键字
    			{
    				listFitFileArray.add(listPathNameArray[index]);
    			}
    		}
    	}
    	
    }
    
    import java.io.File;
    import java.util.Scanner;
    import java.util.Vector;
    
    public class TestSeekFile 
    {
    
    	/**
    	 * @param args
    	 * @author 塘里的潜艇
    	 */
    	public static void main(String[] args) 
    	{
    		Scanner sc = new Scanner(System.in);
    		
    		System.out.println("输入目录  关键字");
    		
    		String pathname = sc.next();			// 指定目录
    		CharSequence charSequence = sc.next();	// 指定关键字
    		SeekFile cf = new SeekFile(pathname, charSequence);
    		Vector<File> fileArray = cf.getTheFitFileName();	// 接收符合要求的路径名数组
    
    		// 依次打印
    		for (int index = 0; index < fileArray.size(); index++)
    		{
    			System.out.println(fileArray.get(index));
    		}
    	}
    }
    
  • 相关阅读:
    uva111 History Grading
    UVA 10100Longest Match
    UVA 147Dollars
    归并排序模板
    找礼物(find)
    水流(water)dfs
    细菌(disease) 位运算
    单词接龙
    关于jquery的each遍历,return只终止当前循环,不好使的解决办法
    jquery中ajax回调函数使用this
  • 原文地址:https://www.cnblogs.com/submarinex/p/1998070.html
Copyright © 2011-2022 走看看