`
DarkMeteor
  • 浏览: 11420 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

模板和回调模式

阅读更多
package xxx;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import com.xxx.common.logging.Logger;
import com.xxx.common.logging.LoggerFactory;

/**
 * 文件模板工具类
 * 
 * @author xu.le
 * @version $Id: FileTemplate.java,v 0.1 2010-9-8 上午10:38:23 xu.le Exp $
 */
public class FileTemplate {
    
    
    private static final Logger logger = LoggerFactory.getLogger(FileTemplate.class);

    /**
     * 
     * 
     * @param buffer
     * @param baseDir
     * @param fileName
     */
    public static void upload(final byte[] buffer, final String baseDir, final String fileName) {
        executeTemplate(new CallBack() {
            public OutputStream callBack() {
                File file = new File(baseDir, fileName);
                File parent = file.getParentFile();
                if (!parent.exists()) {
                    parent.mkdirs();
                    if (logger.isInfoEnabled()) {
                        logger.info("尝试创建目录:");
                    }
                }
                if (!file.exists()) {
                    OutputStream out = null;
                    try {
                        out = new FileOutputStream(file);
                        out.write(buffer);
                    } catch (FileNotFoundException e) {
                        if (logger.isInfoEnabled()) {
                            logger.info("文件无法找到异常", e);
                        }
                    } catch (IOException e) {
                        if (logger.isInfoEnabled()) {
                            logger.info("文件写入异常", e);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return out;
                }
                if (logger.isInfoEnabled()) {
                    logger.info("文件已经存在,不重新生成,文件为" + file);
                }
                return null;
            }
        });
    }

    /**
     * 
     * @param callBack
     */
    private static void executeTemplate(CallBack callBack) {
        OutputStream out = callBack.callBack();
        if (out != null) {
            try {
                out.close();
            } catch (IOException e) {
                if (logger.isInfoEnabled()) {
                    logger.info("OutputStream close error!", e);
                }
            }
        }
    }

    /**
     * 
     * @author xu.le
     * @version $Id: CallBack.java,v 0.1 2010-9-8 上午10:41:50 xu.le Exp $
     */
    private interface CallBack {

        public OutputStream callBack();
    }
}

 

分享到:
评论

相关推荐

    详解java模板和回调机制

    主要为大家详细介绍了java模板和回调机制,学习java模板,感兴趣的朋友可以参考一下

    59丨模板模式(下):模板模式与Callback回调函数有何区别和联系?1

    复用和扩展是模板模式的两大作用,实际上,还有另外一个技术概念,也能起到跟模板模式相同的作用,那就是回调(Callback)。A 类事先注册某个函数 F 到 B类

    亲测完整微信企业号回调模式URL验证代码

    自己前段时间在做微信,刚刚开始企业号回调模式验证总是出问题,找了很多代码,结果都不行,本人现在整理了一个完整的回调模式的验证代码,只需改三个参数即可。

    【转】Spring中模板模式和回调模式的讲解

    NULL 博文链接:https://zhang23242.iteye.com/blog/1904116

    Spring 学习 JdbcTemplate,模板模式,回调

    NULL 博文链接:https://gutou9.iteye.com/blog/286812

    PHP微信企业号开发之回调模式开启与用法示例

    本文实例讲述了PHP微信企业号开发之回调模式开启与用法。...下面我先贴出我验证成功的回调模式开启的代码 <?php //回调开启 include_once "WXBizMsgCrypt.php"; // 假设企业号在公众平台上设置的参数如下 $encodin

    浅谈C++模板实现模块间参数传递及回调

    一篇关于C++模板 设计模式 软件架构的文档,里面实现了一个泛化的命令模式和观察者模式

    Caiguangnan#ProgrammerToolBox#18.回调(模板方法模式)1

    一、回调的实现(模板方法模式)定义:设计操作的算法骨架,将某些步骤延迟到子类中实现(自定义性质很强)。//搭建骨架public final void proce

    spring模板模代码

    spring模板模代码 学习模式用 了解学习模板模式和接口回调

    利用 Spring 自动类型转换与回调模式写出优雅的代码

    当我们使用 dubbo 或者 feign 进行 RPC 调用用时,通常的调用模板方式如下: public BizResponse method(BizRequest request){ RpcRequest rpcRequest = buildRpcRequest(); RpcReponse reuslt = xxxFacade.invoke...

    Spring.3.x企业应用开发实战(完整版).part2

    8.3.1 使用模板和回调机制 8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础...

    Spring3.x企业应用开发实战(完整版) part1

    8.3.1 使用模板和回调机制 8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础...

    一个C++跨平台的轻量级日志类

    // 一个跨平台的轻量级日志类。此类在于展示: // 1. 多线程写日志的思想。(写日志的动作不应对主程序产生较大影响) ... 展示了回调机制的使用 // 5. 展示了单例的使用 // 6. 间接展示了模板类的使用

    Template.apex:评估以Visualforce表达式语法编写的模板

    初步知识Template.apex使用R.apex中的Funcs作为回调机制。 如果您想进一步了解Template.apex,请查看 。例子评估模板要评估以visualforce表达式语法编写的模板,您只需要一行。 String output = new Temp

    demoSuccess.zip

    钩子方法-回调方法-模板模式 博客地址:https://blog.csdn.net/qq_36963950/article/details/107743105

    Node.js高级编程

    , 主要内容, 介绍了查询和读写文件, 研究了流、文件系统、网络和自动化单元测试, 详细描述了如何读写数据流, 从零开始构建TCP和HTTP服务器与客户端, 介绍使用数据报、测试和调试模块以及控制回调流程, 展示了如何用...

    第一章:Owl 组件.docx

    6. **双计数器及其和**:通过父子组件间的回调,展示状态管理和组件通信。 7. **待办事项列表**:通过创建TodoList和TodoItem组件,实践复杂状态管理和组件嵌套。 8. **动态属性**和**添加待办事项**:进一步探索...

    华美淘宝客新版卷皮模板源码飞天侠全自动采集.rar

    伪静态模式(REWRITE模式)QQ回调地址填写:http://域名/oauth-callback-mod-qq 如果你的分割号是/的话就换成http://域名/oauth/callback/mod/qq 伪静态模式(PATHINFO模式)QQ回调地址填写:http://域名/index....

    前端面试题js,html,css,vue

    vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。 具体步骤: 第一步: 需要 observe 的数据...

    JdbcTemplate完全学习

    JdbcTemplate类对可变部分采用回调接口方式实现,如ConnectionCallback通过回调接口返回给用户一个连接,从而可以使用该连接做任何事情、StatementCallback通过回调接口返回给用户一个Statement,从而可以使用该...

Global site tag (gtag.js) - Google Analytics