java实现Starteam检索本地未上传到服务器的目录

本文介绍了一种对比服务器与本地文件差异的方法,通过连接服务器并获取指定项目的文件列表,进而找出本地存在但服务器上缺失的文件夹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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());
  }
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值