use of org.nutz.resource.impl.FileResource in project nutz by nutzam.
the class Scans method scan.
/**
* 在磁盘目录或者 CLASSPATH(包括 jar) 中搜索资源
* <p/>
* <b>核心方法</b>
*
* @param src
* 起始路径
* @param regex
* 资源名需要匹配的正则表达式
* @return 资源列表
*/
public List<NutResource> scan(String src, String regex) {
if (src.isEmpty())
throw new RuntimeException("emtry src is NOT allow");
if ("/".equals(src))
throw new RuntimeException("root path is NOT allow");
List<NutResource> list = new ArrayList<NutResource>();
Pattern pattern = regex == null ? null : Pattern.compile(regex);
// 先看看是不是文件系统上一个具体的文件
if (src.startsWith("~/"))
src = Disks.normalize(src);
File srcFile = new File(src);
if (srcFile.exists()) {
if (srcFile.isDirectory()) {
Disks.visitFile(srcFile, new ResourceFileVisitor(list, src), new ResourceFileFilter(pattern));
} else {
list.add(new FileResource(src, srcFile));
}
}
for (ResourceLocation location : locations.values()) {
location.scan(src, pattern, list);
}
// 如果啥都没找到,那么,用增强扫描
if (list.isEmpty()) {
try {
Enumeration<URL> enu = ClassTools.getClassLoader().getResources(src);
if (enu != null && enu.hasMoreElements()) {
while (enu.hasMoreElements()) {
try {
URL url = enu.nextElement();
ResourceLocation loc = makeResourceLocation(url);
if (url.toString().contains("jar!"))
loc.scan(src, pattern, list);
else
loc.scan("", pattern, list);
} catch (Throwable e) {
if (log.isTraceEnabled())
log.trace("", e);
}
}
}
} catch (Throwable e) {
if (log.isDebugEnabled())
log.debug("Fail to run deep scan!", e);
}
// 依然是空?
if (list.isEmpty()) {
try {
InputStream ins = getClass().getClassLoader().getResourceAsStream(src);
if (ins != null) {
list.add(new SimpleResource(src, src, ins));
}
} catch (Exception e) {
}
}
}
Collections.sort(list);
if (log.isDebugEnabled())
log.debugf("Found %s resource by src( %s ) , regex( %s )", list.size(), src, regex);
return list;
}
use of org.nutz.resource.impl.FileResource in project nutz by nutzam.
the class NutConf method loadResource.
/**
* 加载资源
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
private void loadResource(String... paths) {
for (String path : paths) {
List<NutResource> resources;
if (path.endsWith(".js") || path.endsWith(".json")) {
File f = Files.findFile(path);
resources = new ArrayList<NutResource>();
resources.add(new FileResource(f));
} else {
resources = Scans.me().scan(path, "\\.(js|json)$");
}
for (NutResource nr : resources) {
try {
Object obj = Json.fromJson(nr.getReader());
if (obj instanceof Map) {
Map m = (Map) obj;
map = (Map) Mapl.merge(map, m);
for (Object key : m.keySet()) {
if (key.equals("include")) {
map.remove("include");
List<String> include = (List) m.get("include");
loadResource(include.toArray(new String[include.size()]));
}
}
}
} catch (Throwable e) {
if (log.isWarnEnabled())
log.warn("Fail to load config?! for " + nr.getName(), e);
}
}
}
}
Aggregations