动态生成seo目录 (三)

news/2024/5/12 8:46:27/文章来源:https://blog.csdn.net/c_molione/article/details/100921357

1.根据新增数据和修改数据,更新服务器txt文本中的url.

2.更新指向txt文本的时间

当更新对应文本中的url时要更新这里的时间

这里的链接当新增和修改项目中的链接时,这里也对于修改和新增

代码:

package com.oce.util;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonArray;import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;public class OperationTxt {/*** 创建文件* @param fileName* @return*/public static boolean createFile(File fileName)throws Exception{try{System.out.println("判断文件是否存在");if(!fileName.exists()){System.out.println("文件不存在开始创建创建");fileName.createNewFile();}else {System.out.println("文件文件存在准备读取文件");}}catch(Exception e){e.printStackTrace();}return true;}/***读取TXT内容* @param file* @return*/public static String readTxtFile(File file){String result = "";try {InputStreamReader reader = new InputStreamReader(new FileInputStream(file),"gbk");BufferedReader br = new BufferedReader(reader);String s = null;while((s=br.readLine())!=null){result = result  + s;System.out.println("读取的内容为:"+s);}} catch (Exception e) {e.printStackTrace();}return result;}/*** 写入TXT,覆盖原内容* @param content* @param fileName* @return* @throws Exception*/public static boolean writeTxtFile(String content,File fileName)throws Exception{RandomAccessFile mm=null;boolean flag=false;FileOutputStream fileOutputStream=null;try {fileOutputStream = new FileOutputStream(fileName);fileOutputStream.write(content.getBytes("gbk"));fileOutputStream.close();flag=true;} catch (Exception e) {e.printStackTrace();}return flag;}/*** 写入TXT,追加写入* @param filePath* @param content*/public static void fileChaseFW(String filePath, String content) {if(content==null || content.equals("")){return;}try {//构造函数中的第二个参数true表示以追加形式写文件FileWriter fw = new FileWriter(filePath,true);fw.write("\r\n");fw.write(content);fw.close();} catch (IOException e) {System.out.println("文件写入失败!" + e);}}public static void main(String[] args) throws Exception{File file = new File("C:\\Users\\hunuo\\Desktop\\dome.xml");createFile(file);String outText= readTxtFile(file);System.out.println(outText);//writeTxtFile("我是写入的内容11",file);//fileChaseFW("C:\\Users\\hunuo\\Desktop\\Operation.txt","66666666");//String outText1= readTxtFile(file);//System.out.println(outText1);
//        JSONObject jsonObject=StringAnalysisXml.documentToJSONObject(outText);
//        System.out.println("------------------------------------------------------");
//        System.out.println(jsonObject);
//        JSONArray jsonElements=jsonObject.getJSONArray("sitemap");
//        System.out.println(jsonElements);System.out.println("------------------------------------------------------");putSeoUrl("C:\\Users\\hunuo\\Desktop\\sitemap_top.txt","http://www.XXX.cn/xgt","http://www.XXX.com.cn/ybj");OperationTxt.outTxt(0,"C:\\Users\\hunuo\\Desktop\\dome.xml");}/*** 监测更新文件对文件目录更新时间进行刷新* @param index* @param path*/public static void outTxt(int index,String path){SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");try {//读取文件File file = new File(path);//文件不存在就创建createFile(file);//读取文件内容String outText= readTxtFile(file);//将xml文件转换成jsonobejcJSONObject jsonObject=StringAnalysisXml.documentToJSONObject(outText);JSONArray jsonElements=jsonObject.getJSONArray("sitemap");JSONArray jsonArray=new JSONArray();for(int i=0;i<=jsonElements.size()-1;i++){if(i==index){JSONObject text=jsonElements.getJSONObject(index);text.put("lastmod",formatter.format(new Date()));jsonArray.add(text);}else {jsonArray.add(jsonElements.getJSONObject(i));}}System.out.println(jsonArray);jsonObject.put("sitemap",jsonArray);//把文件内容写入文本中//writeTxtFile("123",file);StringBuffer buffer = new StringBuffer();buffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n");buffer.append("<sitemapindex>\n");String xml=StringAnalysisXml.jsonToXmlstr(jsonObject,buffer);writeTxtFile(xml+"</sitemapindex>",file);}catch (Exception e){e.printStackTrace();}}/*** 将更新的内容替换的对应的服务器文本上(若文本上有就进行替换,没有就追加)* @param path*/public static void putSeoUrl(String path,String oldString,String newString) {try {File file = new File(path);createFile(file);//建立临时文件路径String url=path.replaceAll(path.substring(path.lastIndexOf("/")+1),"")  ;String urlPth=url+System.currentTimeMillis()+".txt";//判断文本中是否包含该文件,若包含就进行替换boolean t= StringAnalysisXml.alterStringToCreateNewFile(oldString,newString,urlPth,file);//判断是否替换,若没有就添加内容if(t==false){if(newString!=null && !newString.equals("")){fileChaseFW(path,newString);}}}catch (Exception e){e.printStackTrace();}}
}

 

和XML相关的方法:

 

package com.oce.util;import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;public class StringAnalysisXml {/*** String 转 org.dom4j.Document* @param xml* @return* @throws DocumentException*/public static Document strToDocument(String xml){try {//加上xml标签是为了获取最外层的标签,如果不需要可以去掉return DocumentHelper.parseText(xml);} catch (DocumentException e) {return null;}}/*** org.dom4j.Document 转  com.alibaba.fastjson.JSONObject* @param xml* @return* @throws DocumentException*/public static JSONObject documentToJSONObject(String xml){return elementToJSONObject(strToDocument(xml).getRootElement());}/*** org.dom4j.Element 转  com.alibaba.fastjson.JSONObject* @param node* @return*/public static JSONObject elementToJSONObject(Element node) {JSONObject result = new JSONObject();// 当前节点的名称、文本内容和属性List<Attribute> listAttr = node.attributes();// 当前节点的所有属性的listfor (Attribute attr : listAttr) {// 遍历当前节点的所有属性result.put(attr.getName(), attr.getValue());}// 递归遍历当前节点所有的子节点List<Element> listElement = node.elements();// 所有一级子节点的listif (!listElement.isEmpty()) {for (Element e : listElement) {// 遍历所有一级子节点if (e.attributes().isEmpty() && e.elements().isEmpty()) // 判断一级节点是否有属性和子节点result.put(e.getName(), e.getTextTrim());// 沒有则将当前节点作为上级节点的属性对待else {if (!result.containsKey(e.getName())) // 判断父节点是否存在该一级节点名称的属性result.put(e.getName(), new JSONArray());// 没有则创建((JSONArray) result.get(e.getName())).add(elementToJSONObject(e));// 将该一级节点放入该节点名称的属性对应的值中}}}return result;}/*** 将jsonobject 转换成 xml字符串*  jobj  数据部分内容,buffer  xml 文件标准内容* @param jObj   the j obj* @param buffer the buffer* @return the string*/public static String jsonToXmlstr(JSONObject jObj,StringBuffer buffer ){Set<Map.Entry<String, Object>> se = jObj.entrySet();for(Iterator<Map.Entry<String, Object>> it = se.iterator(); it.hasNext(); ){Map.Entry<String, Object> en = it.next();if(en.getValue().getClass().getName().equals("com.alibaba.fastjson.JSONObject")){buffer.append(" <"+en.getKey()+">");JSONObject jo = jObj.getJSONObject(en.getKey());jsonToXmlstr(jo,buffer);buffer.append(" </"+en.getKey()+"> \n");}else if(en.getValue().getClass().getName().equals("com.alibaba.fastjson.JSONArray")){JSONArray jarray = jObj.getJSONArray(en.getKey());for (int i = 0; i < jarray.size(); i++) {buffer.append(" <"+en.getKey()+">");JSONObject jsonobject =  jarray.getJSONObject(i);jsonToXmlstr(jsonobject,buffer);buffer.append("</"+en.getKey()+"> \n");}}else if(en.getValue().getClass().getName().equals("java.lang.String")){buffer.append(" <"+en.getKey()+">"+en.getValue());buffer.append("</"+en.getKey()+"> \n");}}return buffer.toString();}/*** 替换文本内容中的特定的字符串* @param oldString    需要替换的字符串* @param newString    替换的内容* @param path         临时文件的路径* @param file         源文件*/public static boolean alterStringToCreateNewFile( String oldString, String newString ,String path,File file){boolean t=true;try {long start = System.currentTimeMillis(); //开始时间BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream( file))); //创建对目标文件读取流File newFile = new File(path); //创建临时文件if (!newFile.exists()){newFile.createNewFile(); //不存在则创建}//创建对临时文件输出流,并追加BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newFile,true)));String string = null; //存储对目标文件读取的内容int sum = 0; //替换次数while ((string = br.readLine()) != null){//判断读取的内容是否包含原字符串if (string.contains(oldString)){//替换读取内容中的原字符串为新字符串string = new String(string.replace(oldString,newString));sum++;}bw.write(string);bw.newLine(); //添加换行}br.close(); //关闭流,对文件进行删除等操作需先关闭文件流操作bw.close();String filePath = file.getPath();//如果有替换就删除源文件,用新文件替换旧文件,如果没有替换就返回falseif(sum>0){file.delete(); //删除源文件newFile.renameTo(new File(filePath)); //将新文件更名为源文件}else {newFile.delete();t=false;}long time = System.currentTimeMillis() - start; //整个操作所用时间;System.out.println(sum+"个"+oldString+"替换成"+newString+"耗费时间:"+time);} catch(Exception e){System.out.println(e.getMessage());t=false;}return t;}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_856958.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

post登陆分析实例,网站自定义password加密方式的分析

前端加密主流的有这么几种方式&#xff1a;RSA、MD5、自定义加密函数&#xff0c;其中自定义加密函数的可变性更加强&#xff0c;在实际分析中也更加有难度。 今天分析一个自定义加密的网站来说明这一点&#xff0c;网站是空中网&#xff0c;首先填个假信息抓个包看看。 表单数…

网站验证码的生成原理、难度控制,及python实现

图片验证码已经广泛的使用在各种反爬虫的场景中&#xff0c;验证码的的生成验证过程对于开发者来说是零成本的&#xff0c;对于用户体验来说可能稍差、但是对于爬虫来说是致命的和高成本的。 下面将介绍使用python实现网站验证码的产生及验证的全过程&#xff0c;然我们对验证码…

pyppeteer持久化修改网站检测浏览器的特征值

在互联网前沿具有价值的网站&#xff0c;在反爬虫领域也做出了深有成效的反爬虫措施&#xff0c;其中浏览器环境检测、用户行为检测是目前对爬虫杀伤力最大的两条技术路线&#xff1b;而浏览器环境检测是以webdriver等几十个特征值为基础的爬虫识别&#xff1b; 此前讲过几篇关…

网站被CC攻击!2个方法教你如何做好防护

CC攻击&#xff08;Challenge Collapsar&#xff09;是DDOS&#xff08;分布式拒绝服务&#xff09;的一种&#xff0c;也是一种常见的网站攻击方法&#xff0c;攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包&#xff0c;造成对方服务器资源耗尽&#xff0c;一直…

利用享元模式模拟网站对象建立 C++

1. 享元模式的概念 享元模式&#xff0c; 运用共享技术可以有效的支持大量细粒度的对象。 利用享元工厂&#xff0c; 用来创建并且管理 享元对象。 我们把享元对象内部并且不会随着环境改变而改变的部分&#xff0c; 称为是享元的内部对象&#xff0c; 而把随着环境改变而改…

建站的辛酸历程

1、首先需要服务器和域名&#xff0c;域名当时看某博主写的新网&#xff0c;然后就选了一个买下&#xff0c;还没绑定个人信息就收到了平均一周俩骚扰电话。强烈不建议新网。 万网被阿里收购了&#xff0c;如果买阿里云的服务建议直接万网选域名&#xff0c;域名买好后还需要备…

Python爬虫模拟登录带验证码网站

点我进入原文 Python爬虫模拟登录带验证码网站 这篇文章主要介绍了Python爬虫模拟登录带验证码网站的相关资料,需要的朋友可以参考下 爬取网站时经常会遇到需要登录的问题&#xff0c;这是就需要用到模拟登录的相关方法。python提供了强大的url库&#xff0c;想做到这个并不难。…

scrapy 学习笔记1 爬取 www.dmoz.org 网站信息

1. 安装配置 具体的安装过程&#xff0c; 官网已经写的很清楚了http://doc.scrapy.org/en/latest/intro/install.html#windows不过在实际安装过程中还是遇到了一个小问题&#xff1a; ie, 缺少microsoft visual c 9.0 运行库&#xff0c; 上图中已经告诉我们了解决方法&am…

基于 flask 框架的模拟instagram 图片分享网站的开发

1. 前言 我们的目标是模拟instagram 制作一个图片分享的网站&#xff0c; 我们这里选用的是 flask 框架&#xff0c; 这个框架小巧&#xff0c; 易于扩展&#xff0c; 简单易用 2. 基本思路 利用sqlalchemy 构建 数据库 orm&#xff0c; 建立 user&#xff0c; image&#x…

基于 flask 框架的模拟instagram 图片分享网站的开发 2

1. 前言 我们之前写过一篇博文http://blog.csdn.net/zhyh1435589631/article/details/51787577&#xff0c; 在那篇博文里面&#xff0c; 我们完成了instagram 网站开发的几个基本功能&#xff0c; 包括首页展示&#xff0c; 个人信息页面显示&#xff0c; 图片详情页面展示等…

基于 flask 框架的模拟instagram 图片分享网站的开发 3

1. 摘要 这次添加的功能是 实现首页和 个人信息页面的异步加载功能 传送门&#xff1a; 基于 flask 框架的模拟instagram 图片分享网站的开发 2 基于 flask 框架的模拟instagram 图片分享网站的开发 1 2. 流程 2.1 profile.js 分析 这里需要编写相应的js 代码&#xff0…

基于 flask 框架的模拟instagram 图片分享网站的开发 4

1. 摘要 这次添加的功能是 个人页图片上传功能和图片详情页评论异步加载功能 传送门&#xff1a; 基于 flask 框架的模拟instagram 图片分享网站的开发 3 基于 flask 框架的模拟instagram 图片分享网站的开发 2 基于 flask 框架的模拟instagram 图片分享网站的开发 1 2. …

基于 flask 框架的模拟instagram 图片分享网站的开发 7 (爬虫机器人)

1. 前言 我们之前使用flask实现了一个模拟instagram的图片分享网站的开发&#xff0c; 但是图片的更新需要用户上传&#xff0c; 但是由于用户比较少&#xff0c; 鉴于这个问题&#xff0c; 我们就考虑引入一个爬虫机器人&#xff0c; 自动的向web程序相关的数据库表项中写入数…

url带斜杠和不带斜杠对seo优化的影响

点我进入原文 ps: seo 是指搜索引擎优化 url带斜杠和不带斜杠对seo优化的影响 作为seo的专员对于这个问题&#xff0c;我觉得很多细心的人都能发现&#xff0c;这二者的区别&#xff0c;但是不知道其中奥妙。今天博主给大家说说关于搜索引擎网址中带/与不带/对于seo的影响。 在…

高并发高流量网站架构

http://blog.csdn.net/SmartTony/archive/2010/09/09/5874485.aspx Web2.0的兴起&#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念&#xff0c;细分了网站功能和用户群&#xff0c;不仅成功的造就了一大批新生的网站&#xff0c;也极大的方便了上网…

从“奥运门票网站800万访问量”想到的成本、质量、进度、风险等关系

看到这个新闻后颇有一番滋味&#xff0c;更体验到我一直关注的软件性能着实无处不在&#xff0c;这个案例也确实值得我们好好反思一下。 不知道网友们有没有报名参加国际日语考试的——这个网站每年05年前都有人不能报名&#xff0c;因为报名人数太多&#xff0c;所以报名当日大…

h5跳微信小程序流程实现——使用云函数,不开通静态网站

官方开源库&#xff1a; GitHub TCloudBase/WXSEVER-SMS 参考教程&#xff1a; https://developers.weixin.qq.com/community/develop/doc/000ae2a7a7c9402a4d8bca2875b409 此教程为官方提供&#xff0c;包含视频文档 步骤&#xff1a; 1. 开通云开发 2. 新建云函数 ope…

搜索引擎SEO外挂:一边搜索,一边看PageRank

搜索引擎SEO外挂&#xff1a;一边搜索&#xff0c;一边看PageRank 下载地址&#xff1a;多么乐站长工具 我原来曾写过一篇统计分析搜索引擎排名和Page Rank 关联分析 的文章。很多人引用&#xff0c;回复和我讨论了我的结论。有赞成的&#xff0c;有反对的&#xff0c;有鼓励的…

seo优化:把百度放进数据库

seo优化:把百度放进数据库 有时候我想&#xff0c;能把百度的数据放进数据库&#xff0c;用广大程序员熟悉的sql语句查询百度的搜索结果应该是一个不错的主意。在这方面Google早已经跨出了一大步&#xff0c;利用Google Search API 把Google的搜索结果放进数据库是很容易办到得…

商业网站 第八章 注册登陆模板设计

注册——插入记录 服务器行为——添加——插入记录——连接:web_ljdata——插入到表格&#xff1a;T_user——获取值自&#xff1a;form1(注册表单&#xff09;——表单元素——注册成功后&#xff1a;插入后转到&#xff08;注册成功表单&#xff09; 验证登陆信息 数据库面板…