package com.b2b.index; import com.hotent.core.web.query.QueryFilter; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang.StringUtils; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ExchangeResourceClass { public void exchangeResource(){ String pendingReplacePath = "http://file1.XXXX.com/20200326132137.png"; //待替换文件路径 String replacePath = "http://file1.XXXXX.com/20201021155829.png"; //提换文件路径 String olderPath3c = DigestUtils.md5Hex(getUrlFileByte(pendingReplacePath)); //读取数据库数据,待替换文本 QueryFilter qfilter = new QueryFilter(); qfilter.addFilter("sequence","1"); List<Appdetailtemplate> appdetailtemplateList = appdetailtemplateService.getAll(qfilter); Long count = 0L; for (Appdetailtemplate detail: appdetailtemplateList) { String URLPattern = "((https?|ftp)://|www[0-9]*?\\.)(?<domain>([A-Z0-9\\-]+\\.)+[A-Z]{1,3})+(([/;\\?][A-Z0-9\\.\\-_/\\.#%:;&=]+)+)?"; String content = detail.getContext(); //待提取富文本内容区 System.out.println("ex---------"+count++); if (content==null || content =="" ||StringUtils.isBlank(content) ) continue; Pattern pattern = Pattern.compile(URLPattern, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(content); String link = ""; while (matcher.find()) { link=matcher.group(); String linkCode = DigestUtils.md5Hex(getUrlFileByte(link)); if (isSameFiles(linkCode,"1")){ System.out.println("hs777--------------"+link); content = content.replace(link,replacePath); System.out.println("替换后的数据----------"+content); }else{ link=""; } break; } } System.out.println("ex结束"); } /** * 验证两个文件字节流是否相等 * @return boolean true 相等 * @throws */ private static boolean isSameResources(String older, String newer) { String firstFileMd5 = older; String secondFileMd5 = ""; if ( "1".equals(newer)){ secondFileMd5 = "a808037f4d68e40cff05fa9d9a35f5f4"; }else{ secondFileMd5 = newer; } // String secondFileMd5 = "a808037f4d68e40cff05fa9d9a35f5f4"; if (firstFileMd5.equals(secondFileMd5)) { // System.out.println("---- equals ------ md5 " + firstFileMd5); return true; } else { System.out.println(firstFileMd5 + " is firstFileMd5 ++ unequal ++ secondFileMd5 = " + secondFileMd5); return false; } } /** * 验证两个文件字节流是否相等 * @return boolean true 相等 * @throws */ private static boolean isSameFiles(String older, String newer) { String firstFileMd5 = DigestUtils.md5Hex(getUrlFileByte(older)); String secondFileMd5 = DigestUtils.md5Hex(getUrlFileByte(newer)); if (firstFileMd5.equals(secondFileMd5)) { System.out.println("---- equals ------ md5 " + firstFileMd5); return true; } else { System.out.println(firstFileMd5 + " is firstFileMd5 ++ unequal ++ secondFileMd5 = " + secondFileMd5); return false; } } /** * 获取线上文件流 * @param url * @return * @throws IOException */ private static byte[] getUrlFileByte(String url) { try { URL urlConet = new URL(url); HttpURLConnection con = (HttpURLConnection)urlConet.openConnection(); con.setRequestMethod("GET"); con.setConnectTimeout(4 * 1000); InputStream inStream = con .getInputStream(); //通过输入流获取图片数据 ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[2048]; int len = 0; while( (len=inStream.read(buffer)) != -1 ){ outStream.write(buffer, 0, len); } inStream.close(); byte[] data = outStream.toByteArray(); return data; }catch (Exception e){ e.printStackTrace(); } return new byte[0]; } /** * 获取本地文件流方法 * @param name * @return */ public static byte[] getByte(String name) { // 得到文件长度 File file = new File(name); byte[] b = new byte[(int) file.length()]; System.out.println(file.length()); try { InputStream in = new FileInputStream(file); try { in.read(b); System.out.println(in.read()); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); return null; } return b; } }
java批量比较文件替换富文本资源路径
最新推荐文章于 2024-06-28 17:22:24 发布