昨晚快下班时,我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());
}
}
最后看一下运行结果吧:
可见是找到了,虽然不美观,代码还是能够运行的。