大佬,你教我的方式我试过了,还是报错了,用文件的时候没有报错,代码和文件内容如下,这个如果换成项目resource下的目录找文件是可行的,不知道是不是这个用字符串生成的Template对象不可行: new GroupTemplate().getTemplate(sb.toString())虽然文件生成了,但是里面是没有内容的!还望大佬指点一二,看看我是不是代码写错了.

21.png

3.png

protected void generateFile(String template, String filePath) {
    	if(template.indexOf("http") != -1) {

            try {
            	//创建一个URL实例
            	URL url = new URL("http://192.168.20.20/group1/M01/00/09/wKgUFFub3CmAer4pAAABjPGvkcI576.btl");
                //通过URL的openStrean方法获取URL对象所表示的自愿字节输入流
                InputStream is = url.openStream();
                InputStreamReader isr = new InputStreamReader(is,"utf-8");

                //为字符输入流添加缓冲
                BufferedReader br = new BufferedReader(isr);
                String data = null;//读取数据
                StringBuffer sb = new StringBuffer();
                while ((data = br.readLine())!=null){//循环读取数据
                    data += "\r\n";
                    sb.append(data);
                }
                br.close();
                isr.close();
                is.close();
                GroupTemplate groupTemplate = new GroupTemplate();
                //这个根据读取出来的模板字符串生成的Template有问题!!!
                Template pageTemplate = groupTemplate.getTemplate(sb.toString());
                templateToFile(filePath, pageTemplate);
            } catch (IOException e) {
                e.printStackTrace();
            }
    	}else {
	        Template pageTemplate = groupTemplate.getTemplate(template);
	        templateToFile(filePath, pageTemplate);
    	}
    }

	protected void templateToFile(String filePath, Template pageTemplate) {
		configTemplate(pageTemplate);
		if (PlatformUtil.isWindows()) {
		    filePath = filePath.replaceAll("/+|\\\\+", "\\\\");
		} else {
		    filePath = filePath.replaceAll("/+|\\\\+", "/");
		}
		File file = new File(filePath);
		File parentFile = file.getParentFile();
		if (!parentFile.exists()) {
		    parentFile.mkdirs();
		}
		FileOutputStream fileOutputStream = null;
		try {
		    fileOutputStream = new FileOutputStream(file);
		    pageTemplate.renderTo(fileOutputStream);
		} catch (FileNotFoundException e) {
		    e.printStackTrace();
		} finally {
		    try {
		        fileOutputStream.close();
		    } catch (IOException e) {
		        e.printStackTrace();
		    }
		}
	}
>>09:28:44:错找

大佬,你教我的方式我试过了,还是报错了,用文件的时候没有报错,代码和文件内容如下,这个如果换成项目resource下的目录找文件是可行的,不知道是不是这个用字符串生成的Template对象不可行: new GroupTemplate().getTemplate(sb.toString())虽然文件生成了,但是里面是没有内容的!还望大佬指点一二,看看我是不是代码写错了.

21.png

3.png

protected void generateFile(String template, String filePath) {
    	if(template.indexOf("http") != -1) {

            try {
            	//创建一个URL实例
            	URL url = new URL("http://192.168.20.20/group1/M01/00/09/wKgUFFub3CmAer4pAAABjPGvkcI576.btl");
                //通过URL的openStrean方法获取URL对象所表示的自愿字节输入流
                InputStream is = url.openStream();
                InputStreamReader isr = new InputStreamReader(is,"utf-8");

                //为字符输入流添加缓冲
                BufferedReader br = new BufferedReader(isr);
                String data = null;//读取数据
                StringBuffer sb = new StringBuffer();
                while ((data = br.readLine())!=null){//循环读取数据
                    data += "\r\n";
                    sb.append(data);
                }
                br.close();
                isr.close();
                is.close();
                GroupTemplate groupTemplate = new GroupTemplate();
                //这个根据读取出来的模板字符串生成的Template有问题!!!
                Template pageTemplate = groupTemplate.getTemplate(sb.toString());
                templateToFile(filePath, pageTemplate);
            } catch (IOException e) {
                e.printStackTrace();
            }
    	}else {
	        Template pageTemplate = groupTemplate.getTemplate(template);
	        templateToFile(filePath, pageTemplate);
    	}
    }

	protected void templateToFile(String filePath, Template pageTemplate) {
		configTemplate(pageTemplate);
		if (PlatformUtil.isWindows()) {
		    filePath = filePath.replaceAll("/+|\\\\+", "\\\\");
		} else {
		    filePath = filePath.replaceAll("/+|\\\\+", "/");
		}
		File file = new File(filePath);
		File parentFile = file.getParentFile();
		if (!parentFile.exists()) {
		    parentFile.mkdirs();
		}
		FileOutputStream fileOutputStream = null;
		try {
		    fileOutputStream = new FileOutputStream(file);
		    pageTemplate.renderTo(fileOutputStream);
		} catch (FileNotFoundException e) {
		    e.printStackTrace();
		} finally {
		    try {
		        fileOutputStream.close();
		    } catch (IOException e) {
		        e.printStackTrace();
		    }
		}
	}
>>09:28:44:错找不到指定模板或者加载错(TEMPLATE_LOAD_ERROR): 位于0行 资源:<% for(menu in sqls.menus!){ %>
INSERT INTO `guns`.`sys_menu` (`id`, `code`, `pcode`, `pcodes`, `name`, `icon`, `url`, `num`, `levels`, `ismenu`, `tips`, `status`, `isopen`) VALUES ('${menu.id}', '${menu.code}', '${menu.pcode}', '${menu.pcodes}', '${menu.name}', '${menu.icon}', '${menu.url}', '${menu.num}', '${menu.levels}', '${menu.ismenu}', NULL, '${menu.status}', '${menu.isopen}');
<% } %>

ClassLoader:org.springframework.boot.devtools.restart.classloader.RestartClassLoader@57b86173 Path:
yxg 2018年09月15日

利用字符串生成的模板:

@Test
	public void beetl2() throws Exception {
                //模板字符串
		String temp = "<% for(menu in sqls.menus){ %>\r\n" + 
				"INSERT INTO `guns`.`sys_menu` (`id`, `code`, `pcode`, `pcodes`, `name`, `icon`, `url`, `num`, `levels`, `ismenu`, `tips`, `status`, `isopen`) " +
				"VALUES ('${menu.id}', '${menu.code}', '${menu.pcode}', '${menu.pcodes}', '${menu.name}', '${menu.icon}', '${menu.url}', '${menu.num}', '${menu.levels}', '${menu.ismenu}', NULL, '${menu.status}', '${menu.isopen}');\r\n" + 
				"<% } %>";
		System.err.println(temp);
		String mstr = "[{\"code\":\"student\",\"icon\":\"\",\"id\":\"1040783441916112898\",\"ismenu\":1,\"isopen\":0,\"levels\":2,\"name\":\"\",\"num\":99,\"pcode\":\"system\",\"pcodes\":\"[0],[system],\",\"status\":1,\"url\":\"/student\"}]";
		List<Menu> menus = (List<Menu>) JSON.parse(mstr);
		//System.out.println(menus);
		
		/**第一个beetl*/
		StringTemplateResourceLoader resourceLoader = new StringTemplateResourceLoader();
		Configuration cfg = Configuration.defaultConfiguration();
		GroupTemplate gt = new GroupTemplate(resourceLoader,cfg);
        Template t = gt.getTemplate(temp);
        SqlConfig sql = new SqlConfig();
        sql.setMenus(menus);
        t.binding("sqls",sql);
        String render = t.render();
        System.out.println("render: "+render);
	}

我错在了不是利用StringTemplateResourceLoader这个对象做的资源所以一直报错.哎,自己做事情太不仔细和只知道copy代码,一到报错就懵逼.自己就当记个教训,希望以后改变自己!!!

闲大赋 2018年09月15日

哈哈,看了刚前面帖子,正有这个想法,觉得你抄的别人代码,没想到你还是不补充了一下正确答案