1.获取富文本信息 正常情况富文本信息是直接有的,如果是存储在文件中处理的话可以参考如下处理。其中文件是文本文件”f:\test.txt”,获得富文本信息sb。
1 2 3 4 5 6 7 8 FileReader fr = new FileReader("f:\\test.txt"); BufferedReader br=new BufferedReader(fr); StringBuilder sb = new StringBuilder(); String line = ""; while ((line = br.readLine()) != null) { sb.append(line); }
2.截取图片标签内容 sb是StringBuilder类型的富文本信息,sb1是包含头部信息的base64,如果要文件内容应该去掉前面部分sb1.substring(23),这里处理的头部信息是”data:image/jpeg;base64,”,如果还有其他的根据情况处理。
1 2 3 4 5 6 7 for (int i = sb.indexOf("data:image/jpeg;base64,"); i >= 0; i = sb.indexOf("data:image/jpeg;base64,",i + 1)) { int j = sb.indexOf("\"", i); StringBuilder sb1 = new StringBuilder(sb.substring(i, j)); ...... ...... }
3.base64解码存储文件 f是文件路径,包含文件名,sb1是包含头部的base64内容。
1 2 3 4 String f = "f:\\hehe"+ Math.random() +".jpeg"; Files.write(Paths.get(f), Base64.decode(sb1.substring(23)), StandardOpenOption.CREATE);
4.重写图片src f是文件路径,包含文件名,如果是最终处理结果,应当处理为网络地址,这里是本地地址,根据程序的情况添加前缀。
5.相对完整代码 其中f的值和最后替换的值根据程序情况处理
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 public static void main(String[] args) throws Exception { FileReader fr = new FileReader("f:\\test.txt"); BufferedReader br=new BufferedReader(fr); StringBuilder sb = new StringBuilder(); String line = ""; while ((line = br.readLine()) != null) { sb.append(line); } //处理图片 'data:image/jpeg;base64,' 结束是英文双引号 //<p><img src="data:image/jpeg;base64, //查找开始,查找结束, for (int i = sb.indexOf("data:image/jpeg;base64,"); i >= 0; i = sb.indexOf("data:image/jpeg;base64,",i + 1)) { int j = sb.indexOf("\"", i); StringBuilder sb1 = new StringBuilder(sb.substring(i, j)); // 生成文件,获得地址 String f = "f:\\hehe"+ Math.random() +".jpeg"; Files.write(Paths.get(f), Base64.decode(sb1.substring(23)), StandardOpenOption.CREATE); sb.replace(i, j, f); } System.out.println(sb.toString()); }