Search in sources :

Example 1 with FileResource

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;
}
Also used : Pattern(java.util.regex.Pattern) ZipInputStream(java.util.zip.ZipInputStream) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) FileResource(org.nutz.resource.impl.FileResource) URL(java.net.URL) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) ResourceLocation(org.nutz.resource.impl.ResourceLocation) ErrorResourceLocation(org.nutz.resource.impl.ErrorResourceLocation) SimpleResource(org.nutz.resource.impl.SimpleResource) File(java.io.File)

Example 2 with FileResource

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);
            }
        }
    }
}
Also used : FileResource(org.nutz.resource.impl.FileResource) ArrayList(java.util.ArrayList) List(java.util.List) NutResource(org.nutz.resource.NutResource) File(java.io.File) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

File (java.io.File)2 ArrayList (java.util.ArrayList)2 FileResource (org.nutz.resource.impl.FileResource)2 FileInputStream (java.io.FileInputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1 MalformedURLException (java.net.MalformedURLException)1 URL (java.net.URL)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 ExecutionException (java.util.concurrent.ExecutionException)1 Pattern (java.util.regex.Pattern)1 ZipInputStream (java.util.zip.ZipInputStream)1 NutResource (org.nutz.resource.NutResource)1 ErrorResourceLocation (org.nutz.resource.impl.ErrorResourceLocation)1 ResourceLocation (org.nutz.resource.impl.ResourceLocation)1 SimpleResource (org.nutz.resource.impl.SimpleResource)1