Java如何获取项目中的Html文件内容

前言

在单页面应用(SPA,Single Page Application)开发中,点击不同的菜单,通常需要动态获取其对应的Html页面代码,返回给前端,再将这一整块append到主框架页面的某个指定div中。所以,Java如何获取Html代码呢?

开发环境中

如在Eclipse中开发一个基于SpringBootSPA,每次右键-Run As/Debug As主类来运行项目,那如何找到某指定页面的html文件呢?如下(字节流):

/**
 * 获取对应pageName的html内容(本地eclipse里直接run)
* 字节流方式读取文件,可能读断一个中文字符,导致乱码 */ @Deprecated private String getHtmlByPageName(String pageName) { URL url = this.getClass().getClassLoader().getResource("templates/" + pageName + ".html"); LOGGER.info("pageName : {} - {}", pageName, url); // File f = new // File("E:\\code_svn\\srp_trunk\\target\\classes\\templates\\404.html"); StringBuffer sb = new StringBuffer(); BufferedInputStream bis = null; try { File f = new File(url.toURI()); FileInputStream fis = new FileInputStream(f); bis = new BufferedInputStream(fis); int len = 0; byte[] temp = new byte[1024]; while ((len = bis.read(temp)) != -1) { sb.append(new String(temp, 0, len)); } LOGGER.debug("page content:\n{}...", sb.toString().substring(0, 200)); } catch (Exception e) { LOGGER.error("Error occurred, cause by: ", e); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { LOGGER.error("Error occurred, cause by: ", e); } } } return sb.toString(); }

注意事项

采用字节流读取文本,容易读断一个完整的汉字,从而造成页面部分汉字乱码,如��。

所以,以字符流方式读取更佳,如下(字符流):

/**
 * 获取对应pageName的html内容(本地eclipse里直接run)
* 字符流方式读取文件 */ private String getHtmlByPageName1(String pageName) { URL url = this.getClass().getClassLoader().getResource("templates/" + pageName + ".html"); LOGGER.info("pageName : {} - {}", pageName, url); // File f = new // File("E:\\code_svn\\srp_trunk\\target\\classes\\templates\\404.html"); StringBuffer sb = new StringBuffer(); BufferedInputStream bis = null; try { File f = new File(url.toURI()); FileInputStream fis = new FileInputStream(f); bis = new BufferedInputStream(fis); BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String s = ""; while ((s = br.readLine()) != null) { sb.append(s).append("\n"); } LOGGER.debug("page content:\n{}...", sb.toString().substring(0, 200)); } catch (Exception e) { LOGGER.error("Error occurred, cause by: ", e); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { LOGGER.error("Error occurred, cause by: ", e); } } } return sb.toString(); }

 

生产环境中

在生产环境中,不同于开发环境,我们经常需要java -jar来运行目标jar包,那在SpringBoot打出来的jar包中,如何找到某指定页面的html文件呢?如下(字符流):

/**
 * 获取对应pageName的html内容(生产环境java -jar直接run)
 */
private String getHtmlByPageName2(String pageName) throws IOException {
    // /BOOT-INF/classes/templates/dashboard.html
    String path = "/BOOT-INF/classes/templates/" + pageName + ".html";
    // 返回读取指定资源的输入流
    InputStream is = this.getClass().getResourceAsStream(path);
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String s = "";
    StringBuffer sb = new StringBuffer();
    while ((s = br.readLine()) != null) {
        sb.append(s).append("\n");
    }
    return sb.toString();
}

注意每次readLine后都别忘了append换行符,否则会导致html中的

你可能感兴趣的:(SpringBoot,J2EE)