private void check(File f, String[] splits, int i, String file) throws IOException{
		if(splits.length-1==i){
			String s = splits[i];
			s = "\\Q"+s+".xsm\\E";
			final Pattern pattern = Pattern.compile(s.replace("*", "\\Q.*\\E").replace("?", "\\Q.\\E"));
			File[] files = f.listFiles(new FileFilter() {
				@Override
				public boolean accept(File pathname) {
					if(pathname.isFile()){
						return pattern.matcher(pathname.getName()).matches();
					}
					return false;
				}
			});
			for(File f2:files){
				String file2;
				String n = f2.getName();
				int index = n.lastIndexOf('.');
				if(index!=-1){
					n = n.substring(0, index);
				}
				if(file==null){
					file2 = n;
				}else{
					file2 = file + "." + n;
				}
				if(compiled.contains(file2))
					continue;
				compiled.add(file2);
				processFile(file, file2, f2);
			}
		}else{
			f = new File(f, splits[i]);
			if(file==null){
				file = splits[i];
			}else{
				file += "."+splits[i];
			}
			if(f.exists()){
				check(f, splits, i+1, file);
			}
		}
	}