由于之前研究过SVNKit相关的使用,有不少同仁咨询我相关的问题,特此示例以供参考。
package org.xiangxji.svn;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.junit.Test;
import org.tmatesoft.svn.core.SVNDirEntry;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNNodeKind;
import org.tmatesoft.svn.core.SVNProperties;
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.io.fs.FSRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.wc.SVNWCUtil;
/**
* SVNManager SVN 管理器
* @author <a href="xiangxji@gmail.com">xiangxji</a>
* @since 2010-03-27
*/
public class SVNManager{
private String url = "svn://localhost/";
private String username = "harry";
private String password = "harryssecret";
private SVNRepository repository;
/**
* 初始化操作
* @throws Exception
*/
public void initialize() throws Exception {
FSRepositoryFactory.setup();
DAVRepositoryFactory.setup();
SVNRepositoryFactoryImpl.setup();
repository = SVNRepositoryFactoryImpl.create(SVNURL
.parseURIEncoded(this.url));
ISVNAuthenticationManager authManager = SVNWCUtil
.createDefaultAuthenticationManager(this.username,
this.password);
repository.setAuthenticationManager(authManager);
}
/**
* 从SVN服务器获取文件
* @param filePath 相对于仓库根目录的路径
* @param outputStream 要输出的目标流,可以是文件流 FileOutputStream
* @param version 要checkout的版本号
* @return 返回checkout文件的版本号
* @throws Exception 可以自定义Exception
*/
public long getFileFromSVN(String filePath, OutputStream outputStream,
long version) throws Exception {
SVNNodeKind node = null;
try {
node = repository.checkPath(filePath, version);
} catch (SVNException e) {
throw new Exception("SVN检测不到该文件:" + filePath, e);
}
if (node != SVNNodeKind.FILE) {
throw new Exception(node.toString() + "不是文件");
}
SVNProperties properties = new SVNProperties();
try {
repository.getFile(filePath, version, properties, outputStream);
} catch (SVNException e) {
throw new Exception("获取SVN服务器中的" + filePath + "文件失败", e);
}
return Long.parseLong(properties.getStringValue("svn:entry:revision"));
}
/**
* 获取目录下的所有文件和子目录
* @param res 包含目录参数的资源对象.参加{@link Resource#getPath()}
* @return 资源列表
* @throws Exception
*/
@SuppressWarnings("unchecked")
public List<Resource> getChildren(Resource res) throws Exception {
String path = res.getPath();
Collection<SVNDirEntry> entries;
try {
entries = repository.getDir(path, -1, null, (Collection) null);
} catch (SVNException e) {
throw new Exception("获得" + path + "下级目录失败", e);
}
List<Resource> result = new ArrayList<Resource>();
for (SVNDirEntry entry : entries) {
if (containsSpecialFile(entry)) {
Resource resource = new Resource();
resource.setName(entry.getName());
resource.setPath(entry.getURL().getPath());
resource.setFile(entry.getKind() == SVNNodeKind.FILE);
result.add(resource);
}
}
return result;
}
/**
* 判断文件是否存在
* @param entry 要判断的节点.参加{@link SVNDirEntry}
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
private boolean containsSpecialFile(SVNDirEntry entry)
throws Exception {
if (entry.getKind() == SVNNodeKind.FILE) {
return true;
} else if (entry.getKind() == SVNNodeKind.DIR) {
Collection<SVNDirEntry> entries;
String path = entry.getURL().getPath();
try {
entries = repository.getDir(path, -1, null, (Collection) null);
} catch (SVNException e) {
throw new Exception("获得" + path + "下级目录失败", e);
}
for (SVNDirEntry unit : entries) {
if (containsSpecialFile(unit)) {
return true;
}
}
return false;
}
return false;
}
@Test
public void testGetFile() {
OutputStream outputStream;
try {
initialize();
String outFileName = "D:/t1/11.txt";
outputStream = new FileOutputStream(outFileName);
System.out.println(getFileFromSVN("/t1/11.txt",outputStream,7L));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testGetDir() {
try {
initialize();
Resource res = new Resource();
res.setPath("/app1/");
List<Resource> rs = getChildren(res);
for(Resource r : rs) {
System.out.println(r.getFile()?"file:":"directory:" + r.getPath());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package org.xiangxji.svn;
/**
* 资源对象
* @author <a href="xiangxji@gmail.com">xiangxji</a>
* @since 2010-03-27
*/
public class Resource {
/**
* 相对仓库根目录的路径
*/
private String path;
/**
* 文件/文件夹的名称
*/
private String name;
/**
* 是否是文件 文件:true | 文件夹:false
*/
private boolean isFile;
/**
* 版本号
*/
private long SVNVersion;
/**
* 本地路径
*/
private String localPath;
public String getLocalPath() {
return localPath;
}
public void setLocalPath(String localPath) {
this.localPath = localPath;
}
public long getSVNVersion() {
return SVNVersion;
}
public void setSVNVersion(long sVNVersion) {
SVNVersion = sVNVersion;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean getFile() {
return isFile;
}
public void setFile(boolean isFile) {
this.isFile = isFile;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
}
分享到:
相关推荐
Java调用SVNKit是为了在Java程序中...总结来说,这个Java示例展示了如何使用SVNKit库在Java程序中进行基本的SVN操作,如登录验证和查询目录条目。开发者可以根据这些基础,扩展实现其他SVN功能,如提交、更新、删除等。
在这个实例中,我们拥有一个完整的项目,包含了SVNKit的使用示例,可以直接导入并运行,这对于学习和理解如何在Java应用中利用SVNKit进行版本控制非常有帮助。 一、SVNKit基本操作 1. **初始化仓库连接**:通过`SVN...
这个压缩包包含了SVNKit的帮助文档、API参考以及示例代码,是学习和使用SVNKit的重要资源。 首先,帮助文档是理解SVNKit功能的关键。它通常会详细介绍如何初始化SVN仓库,创建新项目,管理文件版本,解决冲突,以及...
此外,文档通常还包括示例代码,有助于快速上手。 总之,SVNKit是一个全面的Subversion客户端实现,适用于那些希望在Java环境中集成版本控制功能的项目。离线API文档是开发者不可或缺的参考资料,它能帮助开发者...
6. **文档和示例**:SVNKit通常会提供详细的文档和示例代码,帮助开发者快速理解和使用这个库。这包括Javadoc,示例应用程序,以及在线教程和社区支持。 在压缩包文件`svnkit-1.7.9`中,可能包含以下内容: - `...
4. **代码示例** 在`SVNKitTest`这个文件中,可能会有以下关键步骤: - 创建`SVNClientManager`实例,这是执行所有SVN操作的入口点。 - 配置认证信息,包括用户名和密码,以便连接到SVN服务器。 - 调用`checkout...
1. SVNKit简介: SVNKit是一个纯Java实现的Subversion客户端库,无需依赖本地SVN客户端或者C语言的SWIG接口。它为开发者提供了API,可以在不离开Java环境的情况下执行所有常见的SVN操作。此外,SVNKit还支持多种...
描述中提到的“实例代码”意味着该压缩包中可能包含了一些示例代码,这些代码展示了如何使用SVNkit进行实际操作。这对于初学者或者需要快速上手的开发者来说是非常宝贵的资源,因为他们可以直接参考这些代码了解如何...
### SVNKit Java操作SVN详解 #### 一、SVN快速入门 ...以上是对使用SVNKit进行SVN操作的基本介绍和示例代码,涵盖了从快速入门到高级操作的全过程。希望这些内容能够帮助您更好地理解和掌握SVNKit在Java中的应用。
标题 "svnkit-demo.rar" 暗示了一个关于使用 SVNKit 框架进行 Subversion(SVN)操作的示例项目。这个项目可能包含了演示如何对比不同版本号的文件、管理版本库以及获取相关信息并将其格式化为 JSON 的代码。 SVN...
一、SVNKit简介 SVNKit是一个开源的Java库,它为Java应用程序提供了对Subversion API的完整访问。由于是用Java编写,它可以在任何支持Java的平台上运行,包括Windows、Linux、Mac OS等。SVNKit不仅提供了命令行工具...
这个"svnkit的demo"可能是包含了一些示例代码或者教程,用于演示如何使用SVNKit库进行SVN操作。 首先,我们来了解一下SVNKit的基本概念和功能: 1. **SVN连接管理**:SVNKit支持多种连接方式,包括HTTP、HTTPS、...
10. **社区支持**:SVNKit有一个活跃的开发者社区,提供了详细的文档、示例代码和论坛支持,帮助开发者解决问题并充分利用该库的功能。 综上所述,SVNKit 1.7.11是Java开发者实现Subversion功能的强大工具,它为...
本文将详细解析SVNKit API中的几个关键方法,并通过一个具体的示例来展示如何使用这些方法实现常见的SVN操作。 #### SVNKit API简介 SVNKit是一个完全由Java编写的Subversion客户端库,它允许开发者在Java应用程序...
在给定的资源中,"SVNkit的pom文件"指的是Maven的配置文件,而"实例代码"则是使用SVNKit进行操作的示例程序。 `pom.xml`是Maven项目对象模型(Project Object Model)文件,它是Maven项目的核心。在这个文件中,...
通常,这种命名方式意味着包含了一系列与该版本相关的文件,如不同模块的jar包、文档、示例代码等。 总的来说,这个压缩包提供的是SVNKit 1.7.11版本的开发资源,包括API jar包和源代码。开发者可以利用这些资源在...
SVNKit是一种Java库,它提供了对Subversion版本控制系统的完整接口,允许开发者在Java应用程序中集成Subversion功能。SVNKit开发手册为想要学习SVN二次开发的程序员提供了全面的指南,涵盖了SVNKit的主要组件与用法...
更多关于SVNKit的详细信息,包括官方文档、社区论坛、示例代码等,都可作为进一步学习的资源。了解这些资源将有助于更深入地掌握SVNKit的使用技巧,提高开发效率。 总之,SVNKit为Java开发者提供了一个强大且灵活的...
以下是一个基本示例,展示如何使用SVNKit 1.10.0获取SVN仓库的日志: ```java import com.tmatesoft.svn.core.*; import com.tmatesoft.svn.core.wc.*; import com.tmatesoft.svn.core.io.*; import ...