`

更新提取小工具

 
阅读更多

package tool;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

 

import org.apache.log4j.Logger;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.input.SAXBuilder;

import org.jdom.xpath.XPath;

 

 

/**

 * 代码提取更新工具

 * @author Administrator

 *

 */

public class MyToolApp

{

 private static Logger logger = Logger.getLogger(MyToolApp.class);   

 // private Display display;

 // private Shell shell;

  private String text_directory; // 文件目录

  private String text_outputdirectory;// 输出目录 

  private String text_starttime;

  private String text_endtime;

  

  private boolean containsSrc = false;//是否包含源码

  

  private String directory;

  private String projectName;//项目名称

  private String outputdirectory;//输出目录

  private long long_starttime;//开始时间

  private long long_endtime;//结束时间

  private boolean bool_starttime = false;//

 

  private boolean bool_endtime = false;

 

  private boolean bool = true;// 是否文件修改标志 

 

 

  

  private boolean isWebProject = false ;//是否web工程

  private List<String> src = null;

 

  private String output = "WebRoot/WEB-INF/classes";// 文本输出的目录 

  private String web_root_folder = "WebRoot";

  private String configName;//src 要复制的源文件格式 

  

 // private String output = "bin";

  //private String web_root_folder = "bin";

 

  private int sumcount;

  private int successcount;

  private long start;

  /**

   * 更新文件 

   */

  public void open()

  { 

 

  }

  /**

   *  更新文件操作 

   */

  public void search() {

    this.start = System.currentTimeMillis();

    /// 验证数据  

    validate();

 

    this.sumcount = 0;

    this.successcount = 0;

    this.src = new ArrayList();

    if (this.bool)

    {

      try {

    // 读取class 

        readClassPath();

 

        String str = "";

        File f = null;

        File file = null;

        ArrayList list = null;

        String abspath = "";

 

        for (int i = 0; i < this.src.size(); i++) {

          str = this.directory + "/" + (String)this.src.get(i);

          f = new File(str);

 

          if ((f.exists()) && (f.isDirectory())) {

            list = getSubFiles(f);

 

            if (!list.isEmpty()) {

              for (int j = 0; j < list.size(); j++) {

                file = (File)list.get(j);

 

                abspath = file.getAbsolutePath().replace(File.separatorChar, '/');

                // 获取最后修改时间  

                long long_file_time = file.lastModified();

 

                if (!comperTime(Long.valueOf(long_file_time))) {

                  continue;

                }

                if (

                IsSrcFile(abspath.toLowerCase())

                )//java 文件  xml  文件

               

                {

                  System.out.println("修改的文件:" +  abspath); 

                  String path = this.directory + "/" + this.output + abspath.substring(str.length());

                  int index = path.lastIndexOf(".");

                  

                 String aterStr = abspath.substring(abspath.lastIndexOf("."));

                  

                  //获取后缀 

                  if(abspath.endsWith(".java")){

                 path = path.substring(0, index) + ".class";

                  }else{

                 

                 path = path.substring(0, index) + aterStr ;

                  }

                  

                  

                  

 

                  copy(path);

                  f = new File(path);

                  String name = f.getName();

                  int inex = name.lastIndexOf(".");

                  name = name.substring(0, inex);

 

                  List m = innerclass(f);

                  for (int k = 0; k < m.size(); k++) {

                    f = (File)m.get(k);

 

                    copy(f.getAbsolutePath());

                  }

                  if (!this.containsSrc){

                 continue;

                  }

                  // 复制src文件 

                  copySrcFile(abspath, (String)this.src.get(i));

                }

                else

                {

                  if (!comperTime(Long.valueOf(long_file_time)))

                    continue;

                  String path = this.directory + "/" + this.output + abspath.substring(str.length());

 

                  copy(path);

                }

              }

            }

          }

        }

        f = new File(this.directory + "/" + this.web_root_folder);

        list = getSubFiles(f);

        for (int i = 0; i < list.size(); i++) {

          f = (File)list.get(i);

          String path = f.getAbsolutePath().replace(File.separatorChar, '/');

 

          if (path.indexOf(this.directory + "/" + this.output) <= -1) {

            long long_file_time = f.lastModified();

            if (!comperTime(Long.valueOf(long_file_time)))

              continue;

            copy(path);

          }

        }

      }

      catch (Exception e) {

        msg("解析应用程序配置文件出错:" + e.getMessage(), 1);

      }

      long end = System.currentTimeMillis();

      System.out.println("共用 " + (end - this.start) + "毫秒");

      

      String text = "本次总更新文件数 " + this.sumcount + ",成功更新文件数 " + this.successcount ;

      System.out.println(text);

      

      msg("本次总更新文件数 " + this.sumcount + ",成功更新文件数 " + this.successcount);

      try {

        if (this.successcount > 0)

          Runtime.getRuntime().exec("explorer.exe " + this.outputdirectory.replace('/', File.separatorChar));

      } catch (IOException e) {

        msg("请手动查看输出目录");

      }

    }

  }

 

  public boolean copy(String path)

  {

    this.sumcount += 1;

    path = path.replace(File.separatorChar, '/');

    String newpath = null;

    if (this.containsSrc)

      newpath = this.outputdirectory + "/" + this.projectName + "/" + this.web_root_folder + path.substring(this.directory.length() + this.web_root_folder.length() + 1);

    else

      newpath = this.outputdirectory + "/" + this.projectName + path.substring(this.directory.length() + this.web_root_folder.length() + 1);

    File f = new File(path);

    File ff = new File(newpath);

    System.out.println(newpath);

    boolean bool = copyFile(f, ff);

    if (bool)

      this.successcount += 1;

    return bool;

  }

 

  public boolean copySrcFile(String path, String srcName)

  {

    this.sumcount += 1;

    path = path.replace(File.separatorChar, '/');

    String newpath = this.outputdirectory + "/" + this.projectName + "/" + srcName + path.substring(this.directory.length() + srcName.length() + 1);

    File f = new File(path);

    File ff = new File(newpath);

   // System.out.println(newpath);

    boolean bool = copyFile(f, ff);

    if (bool)

      this.successcount += 1;

    return bool;

  }

 

  public boolean comperTime(Long l)

  {

    boolean flag = false;

 

    if ((this.bool_starttime) && (this.long_starttime > l.longValue())) {

      return flag;

    }

    if ((this.bool_endtime) && (this.long_endtime < l.longValue()))

      return flag;

    return !flag;

  }

 

  public List<File> innerclass(File file)

  {

    int pos = file.getName().lastIndexOf(".");

    String shortname = file.getName().substring(0, pos);

    File parent = file.getParentFile();

    List list = new ArrayList();

    if ((parent.exists()) && (parent.isDirectory())) {

      File[] flist = parent.listFiles();

      File f = null;

 

      for (int i = 0; i < flist.length; i++) {

        f = flist[i];

        int index = f.getName().indexOf(shortname + "$");

        if (index == 0)

          list.add(f);

      }

    }

    return list;

  }

 

  public static ArrayList<File> getSubFiles(File baseDir)

  {

    ArrayList ret = new ArrayList();

 

    if (baseDir.exists()) {

      File[] tmp = baseDir.listFiles();

      if (tmp != null) {

        for (int i = 0; i < tmp.length; i++) {

          if ((tmp[i].isFile()) && (!tmp[i].isHidden())) {

            ret.add(tmp[i]);

          }

          if ((tmp[i].isDirectory()) && (!tmp[i].isHidden())) {

            ret.addAll(getSubFiles(tmp[i]));

          }

        }

      }

      tmp = (File[])null;

      return ret;

    }

    return null;

  }

 

  public static boolean copyFile(File oldFile, File newFile)

  {

    boolean flag = false;

    try {

      File f = new File(newFile.getParent());

      if (!f.exists())

        f.mkdirs();

      long l = oldFile.lastModified();

      FileInputStream input = new FileInputStream(oldFile);

      FileOutputStream output = new FileOutputStream(newFile);

      int len = 0;

      byte[] buffer = new byte[1024];

      while ((len = input.read(buffer)) != -1) {

        output.write(buffer, 0, len);

      }

      input.close();

      output.flush();

      output.close();

      newFile.setLastModified(l);

      if (newFile.exists())

        flag = true;

    } catch (FileNotFoundException e) {

      e.printStackTrace();

    } catch (IOException e) {

      e.printStackTrace();

    } catch (Exception e) {

      e.printStackTrace();

    }

    return flag;

  }

 

  public void readClassPath()

    throws Exception

  {

 initWebProject();

    InputStream is = new FileInputStream(this.directory + "/.classpath");

    SAXBuilder sb = new SAXBuilder();

    Document doc = sb.build(is);

    XPath xpath = XPath.newInstance("//classpath/classpathentry[@kind='src']");

    List list = xpath.selectNodes(doc);

    Element ele = null;

    for (int i = 0; i < list.size(); i++) {

      ele = (Element)list.get(i);

      this.src.add(String.valueOf(ele.getAttributeValue("path").replace(File.separatorChar, '/')));

    }

    xpath = XPath.newInstance("//classpath/classpathentry[@kind='output']");

    list = xpath.selectNodes(doc);

    if ((list != null) && (list.size() > 0)) {

      ele = (Element)list.get(0);

      this.output = ele.getAttributeValue("path").replace(File.separatorChar, '/');

      if(!isWebProject){

          this.web_root_folder = web_root_folder;

      }else{

     int index = this.output.lastIndexOf("/WEB-INF/classes");

          this.web_root_folder = this.output.substring(0, index);

      }

    }

  }

  /**

   * 初始验证是否web项目

   * @throws Exception

   */

  public void  initWebProject()

  throws Exception

{

  InputStream is = new FileInputStream(this.directory + "/.classpath");

  SAXBuilder sb = new SAXBuilder();

  Document doc = sb.build(is);

  XPath xpath = null;

 // XPath xpath = XPath.newInstance("//classpath/classpathentry[@kind='src']");

  List list =null ;

  Element ele = null;

  xpath = XPath.newInstance("//classpath/classpathentry[@kind='output']");

  list = xpath.selectNodes(doc);

  if ((list != null) && (list.size() > 0)) {

    ele = (Element)list.get(0);

    this.output = ele.getAttributeValue("path").replace(File.separatorChar, '/');

    if(this.output.indexOf("bin")>-1){

    output = "bin";

    web_root_folder = "bin";

    isWebProject = false;

    } 

  }

}

 

  public void validate()

  {

/////////验证是否为web项目 

 

    try

    {

      initWebProject();

      File f = null;

      Date date = null;

      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      if ("".equals(this.text_directory.trim())) {

        msg("项目目录不能为空");

        this.bool = false;

        return;

      }

      if ("".equals(this.text_outputdirectory.trim())) {

        msg("输出目录不能为空");

        this.bool = false;

        return;

      }

      f = new File(this.text_directory + "/" + ".classpath");

      if (!f.exists()) {

        msg("项目目录无效");

        this.bool = false;

        return;

      }

      f = f.getParentFile();

      this.directory = f.getAbsolutePath().replace(File.separatorChar, '/');

      this.projectName = f.getName();

      f = new File(this.text_outputdirectory);

      if ((!f.exists()) && (!f.isDirectory())) {

        msg("输出目录无效");

        this.bool = false;

        return;

      }

      f = new File(this.text_outputdirectory + "/updatetool");

      f.mkdirs();

      if (!f.exists()) {

        msg("输出目录无法操作");

        this.bool = false;

        return;

      }

      del(this.text_outputdirectory + "/updatetool");

      f.mkdirs();

      this.outputdirectory = f.getAbsolutePath().replace(File.separatorChar, '/');

      if (this.outputdirectory.indexOf(this.directory) > -1) {

        msg("输出目录选择错误", 1);

        this.bool = false;

        return;

      }

      if (!"".equals(this.text_starttime.trim())) {

        try {

          date = format.parse(this.text_starttime.trim());

          this.long_starttime = date.getTime();

          this.bool_starttime = true;

        } catch (ParseException e) {

          msg("开始时间格式不符合要求", 1);

          this.bool = false;

          return;

        }

      }

      if (!"".equals(this.text_endtime.trim())) {

        try {

          date = format.parse(this.text_endtime.trim());

          this.long_endtime = date.getTime();

          this.bool_endtime = true;

        } catch (ParseException e) {

          msg("结束时间格式不符合要求", 1);

          this.bool = false;

          return;

        }

      }

      if ((this.bool_starttime) && (this.bool_endtime) && (this.long_starttime > this.long_endtime)) {

        msg("开始时间晚于结束时间", 1);

        this.bool = false;

        return;

      }

      if ((!this.bool_starttime) && (!this.bool_endtime)) {

        msg("时间范围不能全部为空", 1);

        this.bool = false;

        return;

      }

      

      ////////////////////////////////////////////////////////////////////////////////////

      

      

    }

    catch (Exception e) {

    e.printStackTrace();

   

      msg("验证发生错误:" + e.getMessage(), 1);

      this.bool = false;

      return;

    }

    this.bool = true;

  }

 

  public static void del(String filepath)

    throws IOException

  {

    File f = new File(filepath);

    if ((f.exists()) && (f.isDirectory())) {

      if (f.listFiles().length == 0) {

        f.delete();

      } else {

        File[] delFile = f.listFiles();

        int i = f.listFiles().length;

        for (int j = 0; j < i; j++) {

          if (delFile[j].isDirectory()) {

            del(delFile[j].getAbsolutePath());

          }

          delFile[j].delete();

        }

        delFile = (File[])null;

      }

    } else if ((f.exists()) && (!f.isDirectory())) {

      f.delete();

    }

    f = null;

  }

 

  public void msg(String msg, int icon)

  {

   /* MessageBox box = new MessageBox(this.shell, icon);

    box.setText("消息");

    box.setMessage(msg);

    box.open();*/

  }

 

  public void msg(String msg)

  {

    msg(msg, 2);

  }

 

  public static void main(String[] args) throws Exception 

  {

 // 设置目录 及其文件路径 

 

 // 项目路径  输出路径 

//  String text_directory = "F:\\work\\工作整理-xiaohua\\项目资料归档\\小项目\\提取工具\\源码\\MyUpdateTool"; // 文件目录

  

 String text_directory = "C:\\Users\\sqh\\Workspaces\\MyEclipse 8.5\\WebPro" ;

 

  String text_outputdirectory = "D:\\updatetool";// 输出目录 

  String text_starttime ="2016-06-06 00:00:00";// 开始时间  

  String text_endtime = "2016-06-07 00:00:00"; // 结束时间 

  boolean containsSrc = true ;//是否包含源码   false 不包含源码 

  

  String configName ="java,xml,properties" ;// 配置 提取的文件 

  

  MyToolApp app = new MyToolApp( text_directory ,  text_outputdirectory , 

   text_starttime , text_endtime , containsSrc , configName);

  // 查询文件 

  app.search();

  }

  public MyToolApp(){

 

  }

  /***

   * 初始化工具 

   * @param text_directory   项目路径 

   * @param text_outputdirectory 输出目录 

   * @param text_starttime   开始时间 

   * @param text_endtime 结束时间 

   * @param containsSrc false 不包含源码  true 包含源码

   */

  public MyToolApp(String text_directory , String text_outputdirectory , 

 String  text_starttime ,String text_endtime ,boolean containsSrc,

 String configName 

  ){

 logger.info(" init MyToolApp   ") ;

 this.text_directory = text_directory ;

 this.text_outputdirectory =  text_outputdirectory ;

 this.text_starttime = text_starttime ;

 this.text_endtime = text_endtime ;

 this.containsSrc = containsSrc ;

 this.configName = configName ;// 配置 提取的文件 

 this.directory = text_directory ;

  }

  /**

   * 验证是否为src的配置文件 

   * @param fileName

   * @return

   */

  public boolean  IsSrcFile(String fileName){

 boolean flag = false;

 String appStr = null;

 if(fileName!=null && !fileName.equals("")){

 appStr = fileName.substring(fileName.lastIndexOf(".")+1);

 if(configName.indexOf(appStr)>-1){

 flag = true;

 }

 }

 return flag;

  }

  

}

分享到:
评论

相关推荐

    短视频无水印提取小工具 v2.4.rar

    6. **兼容性与更新**:考虑到短视频平台可能不断更新其反爬策略,无水印提取工具需要定期更新,以保持与最新平台规则的兼容性。开发者需要密切关注平台的变化,及时更新工具的算法和功能。 7. **法律法规遵守**:在...

    FLV提取小工具

    1. **VVBOX FLV Downloader 1.0.0.0 云龙绿化版.exe**:这很可能是该FLV提取工具的安装或执行程序。"云龙绿化版"通常意味着这是经过第三方优化的版本,去除了不必要的组件,减少了资源占用,使得软件更加轻便且易于...

    金盾视频提取工具

    【金盾视频提取工具】是一种专门用于从特定数据源中提取视频内容的软件工具,尤其在处理金盾系统中的视频监控数据时表现出高效和专业性。金盾系统通常被广泛应用于公共安全、交通管理以及各类场所的安全监控,因此,...

    网众无盘PNP提取工具(注册表网卡驱动文件提取工具)

    网众无盘PNP提取工具是一款专门为无盘网络系统设计的实用软件,它的主要职能是从系统注册表中提取网卡的PNP驱动文件,并将其存储在本地或指定位置,便于后续的备份、更新或故障排查。该工具的出现极大地简化了无盘...

    DELL 最新bios提取工具

    DELL 最新的BIOS提取工具是一款专为DELL计算机用户设计的应用程序,旨在帮助用户方便地获取和更新他们的系统BIOS。BIOS(基本输入输出系统)是计算机硬件与操作系统之间的一个关键接口,负责初始化和控制硬件设备。...

    电脑BIOS提取工具,版本,型号都可以提取

    电脑BIOS提取工具主要用于获取BIOS的信息,包括其版本和型号,这对于系统维护、故障排查以及个性化定制BIOS设置具有重要意义。 标题中的“电脑BIOS提取工具”是指一种专门设计用于读取和提取BIOS固件信息的软件。...

    万能BIOS提取工具.rar

    标题中的“万能BIOS提取工具”指的是一个专门用于从各种品牌计算机主板中提取BIOS固件的软件工具。BIOS(Basic Input/Output System)是计算机启动时加载的初始程序,它负责硬件设备的基本设置和初始化。由于不同...

    无人机POS数据提取工具

    无人机POS数据提取工具是一款专为无人机用户设计的实用软件,主要功能是帮助用户从无人机拍摄的照片中提取位置信息,即POS(Position and Orientation System)数据。POS数据包含了无人机在拍摄时的具体位置和方向,...

    联想BIOS提取工具,联想

    标题中的“联想BIOS提取工具”是指专门用于从联想品牌的计算机BIOS(基本输入输出系统)中提取相关信息的软件工具。BIOS是计算机硬件与操作系统之间的一个基础接口,它负责在启动时执行初始化任务,并提供低级硬件...

    炬力固件提取工具4.0版

    炬力固件提取工具4.0版是一款专为MP3播放器设计的软件,主要用于从设备中提取固件,以便进行备份、更新或故障排除。固件,全称为设备固件(Firmware),是存储在电子设备内部的一种控制程序,它负责管理硬件设备的...

    小程序源码提取工具 完美解包,最新脚本,一键提取小程序源代码工具.zip

    本资源提供了一个小程序源码提取工具,能够帮助开发者或爱好者深入理解小程序的内部结构,进行学习和研究。虽然描述中提到"仅供学习交流使用,不提供技术支持",但我们可以从中探讨一些关于小程序开发和源码分析的...

    金盾提取工具

    【金盾提取工具】是一款专为用户设计的视频提取软件,尤其针对"金盾2012提取"这一特定需求。这款工具旨在提供便捷的方法,帮助用户从各种网络资源中高效、安全地下载和提取所需的视频内容。在互联网上,由于版权保护...

    提取web更新包工具

    【提取Web更新包工具详解】 在现代互联网应用的开发与维护过程中,快速、高效地发布更新是保持软件正常运行和用户体验的关键。"提取Web更新包工具"正是一款为解决这一问题而设计的专业软件,它旨在简化开发者的更新...

    视频提取音频工具

    《视频提取音频工具详解》 在数字化多媒体时代,我们经常需要从视频中单独提取音频,例如,为了制作音乐播放列表或者用于其他项目。在这种情况下,一款高效易用的视频提取音频工具至关重要。本文将深入探讨...

    超强的矩力固件提取工具.rar

    矩力固件提取工具是一款专为IT专业人士设计的软件,主要用于从各种硬件设备或系统固件中提取关键数据。在日常的系统维护、故障排查、设备升级或逆向工程等场景下,这样的工具显得尤为实用。"超强的矩力固件提取工具...

    代码部分更新部署查找提取文件小工具

    会出现正式环境代码和本地不一致的情况,修改完功能后不能整体大war包更新,单个去查找自己修改过的文件及其困难,那么本工具就可以自动根据你的要求找出你想要的更新文件,包括jsp/js/css/xml/class等文件,省心...

    BNK音频文件提取工具

    由于游戏的更新可能会导致BNK文件结构发生变化,因此在使用提取工具时,必须确保它能够兼容当前的游戏版本。第二个是转换质量。不同工具的解码能力以及用户设置的输出格式,都可能影响最终导出音频的质量。第三个则...

    M2ts 提取分离工具

    "M2ts 提取分离工具"是一款专为处理M2TS视频格式而设计的应用程序,它主要用于从M2TS文件中提取或分离音频和视频流。M2TS是一种常见的高清视频格式,常见于Blu-ray Discs和一些数字摄像机录制的视频。这款工具的核心...

    小米ROM提取工具

    【小米ROM提取工具】是一款专为小米手机设计的刷机辅助软件,主要用于从官方更新文件中提取出完整的ROM包,方便用户进行个性化定制或者备份恢复系统。刷机是指更换手机的操作系统或系统组件,通常用于优化性能、增加...

    115网盘连接提取工具

    115网盘连接提取工具是一款专为用户设计的实用软件,主要用于从115网盘分享链接中批量提取文件的实际下载地址。115网盘是中国较早提供云存储服务的平台之一,用户可以通过它上传、存储和分享各类文件。然而,115网盘...

Global site tag (gtag.js) - Google Analytics