1.pom依赖
<dependency> <groupId>org.tmatesoft.svnkit</groupId> <artifactId>svnkit</artifactId> <version>1.3.5</version> </dependency>
import org.tmatesoft.svn.core.SVNDepth; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory; import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions; import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.SVNLogClient; import org.tmatesoft.svn.core.wc.SVNRevision; import org.tmatesoft.svn.core.wc.SVNUpdateClient; public class SvnTest { static { DAVRepositoryFactory.setup(); } private SVNClientManager manager; private SVNURL repositoryBaseUrl; public SvnTest() { DefaultSVNOptions options = new DefaultSVNOptions(); manager = SVNClientManager.newInstance(options); // manager = SVNClientManager.newInstance(options, // "username","passwrod"); //如果需要用户名密码 try { repositoryBaseUrl = SVNURL .parseURIDecoded("http://svn.apache.org/repos/asf/logging/log4j/trunk/src/main/java/org/apache/log4j/or"); // 传入svn地址 } catch (SVNException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void test() throws SVNException { SVNLogClient logClient = manager.getLogClient(); // svn list DirEntryHandler handler = new DirEntryHandler(); // 在svn // co时对每个文件目录的处理,实现ISVNDirEntryHandler接口 logClient.doList(repositoryBaseUrl, SVNRevision.HEAD, SVNRevision.HEAD, false, true, handler); // 列出当前svn地址的目录,对每个文件进行处理 // svn co UpdateEventHandler svnEventHandler = new UpdateEventHandler(); // svn co时对每个文件的处理 SVNUpdateClient client = manager.getUpdateClient(); client.setIgnoreExternals(true); client.setEventHandler(svnEventHandler); File to = new File("e:\\log\\testsvn"); // co出來的文件存放目錄 client.doCheckout(repositoryBaseUrl, to, SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY, false); // svn update client.setIgnoreExternals(true); client.setEventHandler(svnEventHandler); client.doUpdate(to, SVNRevision.HEAD, SVNDepth.INFINITY,true, false); } public static void main(String[] args) throws SVNException { SvnTest svntest = new SvnTest(); svntest.test(); } }
import java.util.ArrayList; import java.util.List; import org.tmatesoft.svn.core.ISVNDirEntryHandler; import org.tmatesoft.svn.core.SVNDirEntry; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNNodeKind; import com.alibaba.tools.code.SearchConfig; public class DirEntryHandler implements ISVNDirEntryHandler { @Override public void handleDirEntry(SVNDirEntry dirEntry) throws SVNException { System.out.println(dirEntry.getRelativePath() + "/" + dirEntry.getName()); } }
import java.io.IOException; import org.apache.commons.io.FileUtils; import org.tmatesoft.svn.core.SVNCancelException; import org.tmatesoft.svn.core.SVNNodeKind; import org.tmatesoft.svn.core.wc.ISVNEventHandler; import org.tmatesoft.svn.core.wc.SVNEvent; import org.tmatesoft.svn.core.wc.SVNEventAction; public class UpdateEventHandler implements ISVNEventHandler { public void handleEvent(SVNEvent event, double progress) { SVNEventAction action = event.getAction(); SVNNodeKind nodeKind = event.getNodeKind(); if (SVNNodeKind.DIR.equals(nodeKind)) { // folder System.out.println(event.getFile().getName()); } else { // treat as file for all other type if (action == SVNEventAction.UPDATE_DELETE) { try { System.out.println(event.getFile().getName() + "\t" + FileUtils.readFileToString(event.getFile())); } catch (IOException e) { } } else if (action == SVNEventAction.UPDATE_ADD || action == SVNEventAction.UPDATE_UPDATE) { try { System.out.println(event.getFile().getName() + "\t" + FileUtils.readFileToString(event.getFile())); } catch (IOException e) { } } } } public void checkCancelled() throws SVNCancelException { } }
输出:
/or jms/jms jms/MessageRenderer.java/MessageRenderer.java jms/package.html/package.html sax/sax sax/AttributesRenderer.java/AttributesRenderer.java sax/package.html/package.html DefaultRenderer.java/DefaultRenderer.java ObjectRenderer.java/ObjectRenderer.java RendererMap.java/RendererMap.java ThreadGroupRenderer.java/ThreadGroupRenderer.java package.html/package.html testsvn testsvn
API参考:
http://svnkit.com/javadoc/org/tmatesoft/svn/core/wc/SVNUpdateClient.html#doUpdate(java.io.File, org.tmatesoft.svn.core.wc.SVNRevision, boolean)