用java实现一个目录下所有文件的全局搜索

昨晚快下班时,我leader问我有没有兴趣写一个东西,我就那说我试试吧。虽然我也没帮上什么帮,因为我leader很快就写好了,但咱也得想办法实现是吧,所以就有了这篇博客。

具体需求如下:
在这里插入图片描述
这个文件中的字符串在下面这个文件夹中文件里是否包含,如果包含那么打印上面文件中的字符串和下面文件夹中的文件名。
在这里插入图片描述
在这里插入图片描述
wang1的文件里有要找的ZHUANGZHUANGSHIGEZHIZHANGA字符串。
在这里插入图片描述
wang2文件里有要找的woaixiedaima字符串。

等到写的时候,我才发现自己的java基础是多薄弱,因为去年找工作前只是断断续续看了点java,而io这块当时被我直接跳过了,后面遇到的也很少,所以这个功能我相当于是边百度边实现的,可能有些不严谨的地方。不过大致逻辑还是能走通的。那么下面我们来上代码吧。

	//返回所有的文件名
	private static List<String> getFileNames(File folder){
	    List<String> fileNames = new ArrayList<String>();
		for(File file : folder.listFiles()) {
			if(!(file.isDirectory())) {
				fileNames.add(file.getName());
			}
		}
		return fileNames;
	}

这个方法是查找目录下所有的文件,并将文件名返回。

	private static List<String> getString(String filePath) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader(filePath));
		String line;
		List<String> fileName = new ArrayList<String>();
		while((line = br.readLine()) != null){
			fileName.add(line);
		}
		return fileName;
	}

这个方法是逐行读取文件里的内容,并逐行读入到list集合。

最后是我的主函数,因为天快亮了,所以代码并没有重构,可能会显得主函数比较臃肿。

	//要查找的文件夹名
	private static String folderPath = "C:\\Users\\王壮\\Documents\\workspace-spring-tool-suite-4-4.4.2.RELEASE\\RBTree\\src\\test\\wang";
	//要查找的匹配文件路径
	private static String file = "C:\\Users\\王壮\\Documents\\workspace-spring-tool-suite-4-4.4.2.RELEASE\\RBTree\\src\\test\\wang3.txt";
	
	public static void main(String[] args) throws IOException {
		File folder = new File(folderPath);
		List<String> baseFileNames = getFileNames(folder);
		//要查找的文件集合
		List<String> p = new ArrayList<String>();
		p = getString(file);
		Map<String,String> map = new HashMap<String,String>();
		for(int i=0; i<p.size(); i++) {
			for(int j=0; j<baseFileNames.size(); j++) {
				List<String> o = new ArrayList<String>();
				o = getString(folderPath+"\\"+baseFileNames.get(j));
				for(int k=0; k<o.size();k++) {
					if(o.get(k).indexOf(p.get(i))>0) {
						map.put(p.get(i), baseFileNames.get(j));
					}
				}
			}
		}
		
		for(Map.Entry<String, String> entry: map.entrySet()) {
			System.out.println(entry.getKey()+"  " + entry.getValue());
		}
	}

最后看一下运行结果吧:
在这里插入图片描述
可见是找到了,虽然不美观,代码还是能够运行的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值