code: public static File[] ls(File d, final Pattern p, final boolean exclude, LsMode mode) {
          if (null == p) {
              return d.listFiles();
          }
          // 全部
          else if (null == mode || LsMode.ALL == mode) {
              return d.listFiles(new FileFilter() {
                  public boolean accept(File f) {
                      return p.matcher(f.getName()).find() ^ exclude;
                  }
              });
          }
          // 仅文件
          else if (LsMode.FILE == mode) {
              return d.listFiles(new FileFilter() {
                  public boolean accept(File f) {
                      if (!f.isFile())
                          return false;
                      return p.matcher(f.getName()).find() ^ exclude;
                  }
              });
          }
          // 仅目录
          else if (LsMode.DIR == mode) {
              return d.listFiles(new FileFilter() {
                  public boolean accept(File f) {
                      if (!f.isDirectory())
                          return false;
                      return p.matcher(f.getName()).find() ^ exclude;
                  }
              });
          }
          // 不可能
          throw Lang.impossible();
      }
docs: 在一个目录里列出所有的子文件或者目录
  
  @param d
  目录
  @param p
  正则表达式对象，如果为空，则是全部正则表达式
  @param exclude
  true 正则表达式匹配的文件会被忽略，false 正则表达式匹配的文件会被包含
  @param mode
  请参看 LsMode 枚举类说明, null 表示 LsMode.ALL
  
  @return 得到文件对象数组
  @see LsMode