package com.leadbank.oprPlatform.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tmatesoft.svn.core.*;
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.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNUpdateClient;

import java.io.ByteArrayOutputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class SvnUtil{

private Logger logger = LoggerFactory.getLogger(SvnUtil.class);

// @Inject(instance = PropertyUtil.class)
// private PropertyUtil propertyUtil;

static {
DAVRepositoryFactory.setup();
}

private SVNClientManager manager;
private SVNUpdateClient updateClient;
private String url;
private String userName;
private String passwd;

public SvnUtil(String userName, String passwd) {
init(userName, passwd);
}

public SvnUtil(String userName, String passwd, String url){
this(userName,passwd);
this.url=url;
}

private void init(String userName,String passwd){
DefaultSVNOptions options = new DefaultSVNOptions();
manager = SVNClientManager.newInstance(options);
manager = SVNClientManager.newInstance(options,userName,passwd);
updateClient = manager.getUpdateClient();
updateClient.setIgnoreExternals(false);
}

/**获取文档内容
* @param url
* @return
*/
public String checkoutFileToString(String url) throws SVNException {//"", -1, null
SVNRepository repository = createRepository(url);
SVNDirEntry entry = repository.getDir("", -1, false, null);
int size = (int)entry.getSize();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(size);
SVNProperties properties = new SVNProperties();
repository.getFile("", -1, properties, outputStream);
String doc = new String(outputStream.toByteArray(), Charset.forName("utf-8"));
return doc;
}

public boolean toParantFolder(){
if(url!=null){
StringBuffer sb = new StringBuffer(url);
if(url.endsWith("/")){
sb.deleteCharAt(sb.length()-1);
}
int index = sb.lastIndexOf("/");
url=sb.substring(0, index);
return true;
}
return false;
}

/**进入子目录
* @param folder
* @return
*/
public boolean toChildFolder(String folder){
if(url!=null){
StringBuffer sb = new StringBuffer(url);
boolean a = url.endsWith("/");
boolean b = folder.startsWith("/");
if(a^b){
sb.append(folder);
}else if(a&b){
sb.deleteCharAt(sb.length()-1);
sb.append(folder);
}else{
sb.append('/').append(folder);
}
if(checkPath(sb.toString())==1){
this.url=sb.toString();
return true;
}
}
return false;
}

/**获取当前目录下的子目录和文件
* @return
* @throws SVNException
*/
public List<SVNDirEntry> listFolder() throws SVNException {
return listFolder(url);
}

/**列出指定SVN 地址目录下的子目录
* @param url
* @return
* @throws SVNException
*/
public List<SVNDirEntry> listFolder(String url){
if(checkPath(url)==1){

SVNRepository repository = createRepository(url);
try {
Collection<SVNDirEntry> list = repository.getDir("", -1, null, (List<SVNDirEntry>)null);
List<SVNDirEntry> dirs = new ArrayList<SVNDirEntry>(list.size());
dirs.addAll(list);
return dirs;
} catch (SVNException e) {
logger.error("listFolder error",e);
}

}
return null;
}

private SVNRepository createRepository(String url){

try {
return manager.createRepository(SVNURL.parseURIEncoded(url), true);
} catch (SVNException e) {
logger.error("createRepository error",e);
}
return null;
}

/**检查路径是否存在
* @param url
* @return 1:存在 0:不存在 -1:出错
*/
public int checkPath(String url){
SVNRepository repository = createRepository(url);
SVNNodeKind nodeKind;
try {
nodeKind = repository.checkPath("", -1);
boolean result = nodeKind == SVNNodeKind.NONE ? false : true;
if(result) return 1;
} catch (SVNException e) {
logger.error("checkPath error",e);
return -1;
}
return 0;
}

public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public static void main(String[] args) throws SVNException {
String url = "http://10.1.1.135/svn/cloudPlatform/oprPlatform/trunk/oprPlatform-web/src/main/webapp/WEB-INF/web.xml";
SvnUtil svn = new SvnUtil("xxx", "xxx");
String xml = svn.checkoutFileToString(url);
System.out.print(xml);
}
}

Java代码操作SVN的更多相关文章

  1. Java代码操作HDFS测试类

    1.Java代码操作HDFS需要用到Jar包和Java类 Jar包: hadoop-common-2.6.0.jar和hadoop-hdfs-2.6.0.jar Java类: java.net.URL ...

  2. 使用java代码操作Redis

    1导入pom.xml依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis ...

  3. java代码操作Redis

    1.导入需要的pom依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEn ...

  4. Java代码操作zookeeper

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  5. 分享知识-快乐自己:java代码 操作 solr

    POM 文件: <!-- solr客户端 --> <dependency> <groupId>org.apache.solr</groupId> < ...

  6. 大数据之路week07--day01(HDFS学习,Java代码操作HDFS,将HDFS文件内容存入到Mysql)

    一.HDFS概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 ...

  7. java:nginx(java代码操作ftp服务器)

    1.检查是否安装了vsftpd [root@linux01 ~]# rpm -qa|grep vsftpd 2.安装vsftpd [root@linux01 ~]# yum -y install vs ...

  8. Java代码操作HDFS(在/user/root/下面創建目錄)

    1.创建HDFS目录并打成jar包 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.h ...

  9. kerberos下JAVA代码操作hbase的方式(客户端方式,应用程序方式)

    (一)如果部署JAVA 代码的主机用户获取了kerberos权限情况下 假设主机名是:client su - client 登录主机后 kinit -kt /keytab的路径/client.keyt ...

随机推荐

  1. Node闲谈之Buffer

    在刚接触Nodejs的时候,有些概念总让学前端的我感到困惑(虽然大学的时候也是在搞后端,世界上最好的语言,you know).我可以很快理解File System,Path等带有明显功能的模块,却一下 ...

  2. MySQL数据库中文变问号

    原文参考:http://www.linuxidc.com/Linux/2017-05/144068.htm 系统是的Ubuntu  16,修改以下配置 1.sudo vi /etc/mysql/my. ...

  3. 一起写框架-Ioc内核容器的实现-基础功能-ComponentScan支持组件注解限制(七)

    实现功能 以上的代码我们发现.我们都是将@ComponentScan扫描的路径下的所有类都加载到容器中的. 而实际需求,我们并不希望所有的类都创建对象,而是加了组件注解@Controller,@Ser ...

  4. ldap数据库--ODSEE--卸载

    针对ldap实例的卸载,即删除,可以通过管理界面进行操作也可以通过命令行进行操作.卸载顺序为ldap实例--agent--ads.这里主要介绍命令操作步骤 1,ldap实例卸载 从ads注销,即不在需 ...

  5. [转载] 基于zookeeper、连接池、Failover/LoadBalance等改造Thrift 服务化

    转载自http://blog.csdn.net/zhu_tianwei/article/details/44115667 http://blog.csdn.net/column/details/sli ...

  6. CLR类型设计之属性

    在之前的随笔中,我们探讨了参数,字段,方法,我们在开始属性之前回顾一下,之前的探讨实际上串联起来就是OOP编程的思想,在接下来的文章中,我们还会讨论接口(就是行为),举个例子:我们如果要做一个学生档案 ...

  7. c++/cmake /Android NDK 动态链接库交叉编译笔记

    项目使用cmake管理,由于项目的需要,核心代码要求跨 Linux/Windows/Android 三平台.Windows和Linux都好说,但Android NDK费了一番功夫还是没有解决.临时的解 ...

  8. laravel MethodNotAllowedHttpException错误一个原因

    前两天在写api的时候,出现一个之前都没有碰到过的问题,如图 可以说提示信息是很不友好了,然后打开错误日志,发现报了一个MethodNotAllowedHttpException这样的错误,这样错误我 ...

  9. JavaEE中的MVC(二)Xml配置实现IOC控制反转

    毕竟我的经验有限,这篇文章要是有什么谬误,欢迎留言并指出,我们可以一起讨论讨论. 我要讲的是IOC控制反转,然后我要拿它做一件什么事?两个字:"解耦",形象点就是:表明当前类中需要 ...

  10. 算法帖——用舞蹈链算法(Dancing Links)求解俄罗斯方块覆盖问题

    问题的提出:如下图,用13块俄罗斯方块覆盖8*8的正方形.如何用计算机求解? 解决这类问题的方法不一而足,然而核心思想都是穷举法,不同的方法仅仅是对穷举法进行了优化 用13块不同形状的俄罗斯方块(每个 ...