1、所属jar包:starteam-sdk-5.2.jar
2、样例代码
package com.comtop.qcms.base.starteam;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.starbase.starteam.Folder;
import com.starbase.starteam.Project;
import com.starbase.starteam.Server;
import com.starbase.starteam.StarTeamFinder;
import com.starbase.starteam.View;
/**
* 对比服务器与本地的差异
*
*/
public class CompareServerAndLocalDirectory {
/** 文件所在磁盘目录 */
private static final String DISK_DIRECTORY = "D:/";
/** 项目名称 */
private static final String PROJECT_NAME = "PROJECTNAME";
/** 检索文件根目录 */
private static final String URL = "/src/main";
/** 服务器上的文件集合 */
private static Map<String, String> serverDirectory = new HashMap<String, String>();
/** 本地有而服务器没有的文件列表 */
private static List<String> singleLocalDirectory = new ArrayList<String>();
public static void main(String[] args) {
compareFile();
// printServerFolder();
compareLocalFolder();
printLocalFolder();
}
public static void compareFile() {
// 连接服务器,服务器地址及端口号
Server server = new Server("10.10.10.1", 11111);
server.connect();
// 登录服务器,用户名及密码
server.logOn("userName", "password");
// 获取要CheckOut的项目
Project[] projects = server.getProjects();
Project project = null;
for (int i = 0; i < projects.length; i++) {
Project next = projects[i];
if (next.getName().equals(PROJECT_NAME)) {
project = next;
break;
}
}
// 获取要CheckOut的视图
View[] views = project.getViews();
View view = null;
for (int i = 0; i < views.length; i++) {
View next = views[i];
if (next.getName().equals(PROJECT_NAME)) {
view = next;
break;
}
}
// 获取文件要CheckOut的文件列表
Folder folder = StarTeamFinder.findFolder(view.getRootFolder(), URL);
serverDirectory.put(folder.getFilePath(""), folder.getFilePath(""));
getSubFolder(server, folder);
server.disconnect();
}
/**
* 获取服务器上的文件目录
*
* @param server
* @param folder
*/
private static void getSubFolder(Server server, Folder folder) {
serverDirectory.put(folder.getFilePath(""), folder.getFilePath(""));
Folder[] subFolders = folder.getSubFolders();
for (Folder subFolder : subFolders) {
getSubFolder(server, subFolder);
}
}
/**
* 循环组装服务器上的目录
*/
private static void compareLocalFolder() {
File file = new File(DISK_DIRECTORY + PROJECT_NAME + URL);
checkSubFolder(file);
}
/**
* 检查服务器上没有而本地有的目录
*
* @param file
*/
private static void checkSubFolder(File file) {
// 如果服务器上不存在而本地存在的目录放入到结果集中
if (serverDirectory.get(file.getPath() + "\\") == null) {
singleLocalDirectory.add(file.getPath());
}
File[] files = file.listFiles();
for (File subFile : files) {
if (subFile.isDirectory()) {
checkSubFolder(subFile);
}
}
}
/**
* 打印本地目录
*/
private static void printLocalFolder() {
for (String directory : singleLocalDirectory) {
System.out.println(directory);
}
}
/**
* 打印服务器目录
*/
private static void printServerFolder() {
Set<Map.Entry<String, String>> set = serverDirectory.entrySet();
for (Iterator<Map.Entry<String, String>> it = set.iterator(); it.hasNext();) {
Map.Entry<String, String> entry = (Map.Entry<String, String>) it.next();
System.out.println(entry.getKey());
}
}
}