svn根据版本号查找文件并下载到本地
来源:互联网 发布:调节阀口径计算软件 编辑:程序博客网 时间:2024/05/29 18:09
svn根据版本号查找文件并下载到本地
package com.mingya.util;import java.io.File;import java.io.FileWriter;import java.util.ArrayList;import java.util.Calendar;import java.util.Collection;import java.util.Iterator;import java.util.List;import org.tmatesoft.svn.core.SVNDepth;import org.tmatesoft.svn.core.SVNDirEntry;import org.tmatesoft.svn.core.SVNException;import org.tmatesoft.svn.core.SVNNodeKind;import org.tmatesoft.svn.core.SVNURL;import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;import org.tmatesoft.svn.core.io.SVNRepository;import org.tmatesoft.svn.core.io.SVNRepositoryFactory;import org.tmatesoft.svn.core.wc.ISVNOptions;import org.tmatesoft.svn.core.wc.SVNClientManager;import org.tmatesoft.svn.core.wc.SVNRevision;import org.tmatesoft.svn.core.wc.SVNUpdateClient;import org.tmatesoft.svn.core.wc.SVNWCUtil;public class DisplayRepositoryTree {private static String url = "https://192.168.30.32/svn/R/r_erp/源码";private static String name = "zhuxb";private static String password = "zhuxb";private static SVNURL repositoryURL = null;private static SVNRepository repository = null;private static SVNClientManager ourClientManager=null;private static SVNUpdateClient updateClient=null; public void execDownload(List<Integer> version){StringBuffer sb = new StringBuffer();Calendar ca = Calendar.getInstance(); StringBuffer year = new StringBuffer(""+ ca.get(Calendar.YEAR)+(ca.get(Calendar.MONTH)+1)+ca.get(Calendar.DATE)); File wcDir = new File("D:\\transfer\\"+year);if(wcDir.exists())wcDir.delete();//判断传入版本号if(version==null||version.size()==0){sb.append("版本号不能为空!");}else{//首先处理版本号 for(int i=0;i<version.size()-1;i++) {for(int j=1;j<version.size()-i;j++) { Integer a; if((version.get(j-1)).compareTo(version.get(j))>0) { //比较两个整数的大小 a=version.get(j-1); version.set((j-1),version.get(j)); version.set(j,a); }} }int len = version.size(); DAVRepositoryFactory.setup(); try { repositoryURL=SVNURL.parseURIEncoded(url); repository = SVNRepositoryFactory.create(repositoryURL); ISVNOptions options = SVNWCUtil.createDefaultOptions(true); //实例化客户端管理类 ourClientManager = SVNClientManager.newInstance((DefaultSVNOptions) options, name, password); //要把版本库的内容check out到的目录 //通过客户端管理类获得updateClient类的实例。 updateClient = ourClientManager.getUpdateClient(); updateClient.setIgnoreExternals(false); ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(name, password); repository.setAuthenticationManager(authManager); for(int i=0;i<len;i++){ sb.append(listEntries("",version.get(i),year.toString())); } } catch (SVNException svne) { System.err.println("创建版本库实例时失败,版本库的URL是 '"+ url + "': " + svne.getMessage()); System.exit(1); } long latestRevision = -1; try { latestRevision = repository.getLatestRevision(); } catch (SVNException svne) { System.err .println("获取最新版本号时出错: " + svne.getMessage()); System.exit(1); }}//写日志if(sb.length()>0){File file = new File("D:/svndownlog/"+year+".txt");//if(!file.exists()) file.mkdir();FileWriter writer=null; try { writer = new FileWriter(file); writer.write(sb.toString()); writer.flush(); writer.close(); } catch (Exception e) {e.printStackTrace();} }}/* * 此函数递归的获取版本库中某一目录下的所有条目。 */ public static String listEntries(String path, int version,String year) throws SVNException { StringBuffer sb = new StringBuffer(); //获取版本库的path目录下的所有条目。参数-1表示是最新版本。 Collection entries = repository.getDir(path, version, null, (Collection) null); Iterator iterator = entries.iterator(); int size=0; while (iterator.hasNext()) { SVNDirEntry entry = (SVNDirEntry) iterator.next(); if(entry.getRevision()==version){ if(entry.getKind()==SVNNodeKind.FILE){ System.out.println("/" + (path.equals("") ? "" : path + "/") + entry.getName()) ; sb.append("第"+(size+1)+"个版本号"+version+"开始下载->>>>\n"); SVNURL u = SVNURL.parseURIEncoded(repositoryURL+"/"+path+"/"+entry.getName()); File fi = new File("D:/transfer/"+year+"/"+path+"/"+entry.getName());long workingVersion = 0;try {workingVersion = updateClient.doExport(u, fi, SVNRevision.HEAD,SVNRevision.parse(version+""), "downloadModel", true, false);//workingVersion = updateClient.doCheckout(u, fi, SVNRevision.HEAD, SVNRevision.parse(version+""), SVNDepth.INFINITY,false);} catch (SVNException e) {e.printStackTrace();}System.out.println("把版本:"+workingVersion+" check out 到目录:"+fi+"中。"); sb.append("第"+(size+1)+"个版本号"+version+"结束下载-<<<<\n");size++; } /* * 检查此条目是否为目录,如果为目录递归执行 */ if (entry.getKind() == SVNNodeKind.DIR) { listEntries((path.equals("")) ? entry.getName() : path + "/" + entry.getName(),version,year); } } } return sb.toString(); } public static void main(String[] args) { List<Integer> version = new ArrayList<Integer>(); version.add(36724); version.add(36718); //version.add(e); //version.add(e); DisplayRepositoryTree rt = new DisplayRepositoryTree(); rt.execDownload(version); }}
代码下载见下方链接
0 0
- svn根据版本号查找文件并下载到本地
- Android安卓根据地址下载文件并保存到本地(HttpDownload)
- linux svn下载文件到本地
- 代码_流:根据url下载文件并写入本地
- 命令行SVN根据版本号查看文件路径
- 根据模板生成word文件并导出保存到本地
- 根据模板生成word文件并导出保存到本地
- 根据url地址下载文件到本地,返回本地文件地址
- 根据网络路径批量下载文件保存到本地
- 根据服务器检测本地版本号并自动更新资源
- 下载文件到本地
- 使用URLConnection下载文件或图片并保存到本地
- 使用urlconnection下载文件或图片并保存到本地
- 用LoadRunner下载文件并保存到本地
- 使用urlconnection下载文件或图片并保存到本地
- loadrunner自动下载文件并保存到本地脚本
- 利用word模板导出word文件并下载到本地
- 用LoadRunner下载文件并保存到本地
- 安装win10步骤
- Redis
- 图片轮播 定时器
- 从 HTTP 到 HTTPS
- eclipse反编译(插件安装以及jad.exe)
- svn根据版本号查找文件并下载到本地
- (转)智能投顾的中国特色:强需求,大规模,低门槛与巨大提升空间
- 知识库--Akka 事务配置-using jvm(134)
- Kickstart 2017 Round A
- 树--1.基本知识
- 马哥2016linux就业班+架构班+运维班全套
- DOM操作
- Django-ORM(一)
- Spring框架概述