src/org/nutz/ioc/impl/PropertiesProxy.java
public PropertiesProxy joinByKey(String key) {
        String str = get(key);
        final PropertiesProxy me = this;
        if (!Strings.isBlank(str)) {
            String[] ss = Strings.splitIgnoreBlank(str, "\n");
            for (String s : ss) {
                File f = Files.findFile(s);
                if (null == f) {
                    throw Lang.makeThrow("Fail to found path '%s' in CLASSPATH or File System!", s);
                }
                // 如果是一个包，引用全部 Files
                if (f.isDirectory()) {
                    Disks.visitFile(f, new FileVisitor() {
                        public void visit(File f) {
                            me.joinAndClose(Streams.fileInr(f));
                        }
                    }, new FileFilter() {
                        public boolean accept(File f) {
                            if (f.isDirectory())
                                return !f.isHidden() && !f.getName().startsWith(".");
                            return f.getName().endsWith(".properties");
                        }
                    });
                }
                // 否则引用单个文件
                else if (f.isFile()) {
                    this.joinAndClose(Streams.fileInr(f));
                }
            }
        }
        return this;
    }
public PropertiesProxy joinByKey(String key) {
        String str = get(key);
        final PropertiesProxy me = this;
        if (!Strings.isBlank(str)) {
            String[] ss = Strings.splitIgnoreBlank(str, "\n");
            for (String s : ss) {
                File f = Files.findFile(s);
                if (null == f) {
                    throw Lang.makeThrow("Fail to found path '%s' in CLASSPATH or File System!", s);
                }
                // 如果是一个包，引用全部 Files
                if (f.isDirectory()) {
                    Disks.visitFile(f, new FileVisitor() {
                        public void visit(File f) {
                            me.joinAndClose(Streams.fileInr(f));
                        }
                    }, new FileFilter() {
                        public boolean accept(File f) {
                            if (f.isDirectory())
                                return !f.isHidden() && !f.getName().startsWith(".");
                            return f.getName().endsWith(".properties");
                        }
                    });
                }
                // 否则引用单个文件
                else if (f.isFile()) {
                    this.joinAndClose(Streams.fileInr(f));
                }
            }
        }
        return this;
    }
public PropertiesProxy joinByKey ( String key ) { String str = get ( key ) ; final PropertiesProxy me = this ; if ( ! Strings . isBlank ( str ) ) { String [ ] ss = Strings . splitIgnoreBlank ( str , "\n" ) ; for ( String s : ss ) { File f = Files . findFile ( s ) ; if ( null == f ) { throw Lang . makeThrow ( "Fail to found path '%s' in CLASSPATH or File System!" , s ) ; } // 如果是一个包，引用全部 Files
 if ( f . isDirectory ( ) ) { Disks . visitFile ( f , new FileVisitor ( ) { public void visit ( File f ) { me . joinAndClose ( Streams . fileInr ( f ) ) ; } } , new FileFilter ( ) { public boolean accept ( File f ) { if ( f . isDirectory ( ) ) return ! f . isHidden ( ) && ! f . getName ( ) . startsWith ( "." ) ; return f . getName ( ) . endsWith ( ".properties" ) ; } } ) ; } // 否则引用单个文件
 else if ( f . isFile ( ) ) { this . joinAndClose ( Streams . fileInr ( f ) ) ; } } } return this ; }
根据自身的一个键对应的值扩展自身的属性。
<p>
本函数假设你可能有下面的键值:

<pre>
...
files:
path/to_a.properties
path/to_b.properties
#End files
</pre>

那么如果你调用 <code>joinByKey("files");</code> <br>
则会将其值的两个属性文件展开，加入到自身。
<p>
属性文件的路径可以是磁盘全路径，或者在 CLASSPATH 里的路径

@param key
键
@return 自身
根据自身的一个键对应的值扩展自身的属性。 <p > 本函数假设你可能有下面的键值 :