velocity工具函数以及InputStream到String的转换方法

一.背景

最近在做需求的时候,需要在程序中把一个vm文件渲染成一个字符串,同时也需要把一个InputStream流转换成一个字符串,虽然说很简单,但是自己还是翻了翻以前的代码,也在网上找了相关的例子,为了下次使用的是能能够快速找到,专门记录一下。

二.实现

velocity渲染的工具类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private static final Logger LOG = LoggerFactory.getLogger(VelocityUtil.class);

public static String render(String content, Map<String, String> param) {
    VelocityEngine ve = new VelocityEngine();
    VelocityContext context = new VelocityContext(param);
    try {
    	//解决velocity LOG的问题       
    	ve.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM, new NullLogChute());
        ve.init();
        StringWriter writer = new StringWriter();
        ve.evaluate(context, writer, content, content);
        return writer.toString();
    } catch (Exception e) {
        LOG.error("velocity render exception...", e);
    }

    return null;
}

InputStream到String转换的工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * 把流转换成字符串的工具函数
 * 
 * @param in
 * @return
 * @throws Exception
 */
public static String inputStreamToString(InputStream in) throws Exception {
    StringBuilder sb = new StringBuilder();
    String line = null;
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line.trim());
        }
    } catch (IOException e) {
        throw e;
    } finally {
        try {
            in.close();
        } catch (IOException e) {
            throw e;
        }
    }
    return sb.toString();
}

也可以直接使用org.apache.commons.io.IOUtils这个工具函数,注意commons-io包中工具函数的使用。