package com.nms.server.thread.file.upload; import java.io.File; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.Future; import org.apache.log4j.Logger; import com.nms.server.common.Common; import com.nms.server.common.Constants; import com.nms.server.dao.CommonDao; import com.nms.server.service.UpgradeService; import com.nms.server.util.ExceptionPrintUtils; import com.nms.server.util.FileUtils; public class FileUploadManagerThread implements Runnable{ Logger logger = Logger.getLogger(FileUploadManagerThread.class); public void run() { //将线程运行程序,尽可能的catch捕获异常 try { // Thread.currentThread().setName("文件上传管理线程"); Thread.currentThread().setName("File Upload Management Thread"); String rootDir = Constants.MISSION_FILE_UPLOAD_DIR; File rootFile = new File(rootDir); if(FileUtils.listFilesEndWithout(rootFile, ".tp").length==0){ logger.info("根目录:> " + rootDir+" 无新文件"); return ; } //任务回传文件归类 增加任务ID解析 Map> missionFileMaps = new HashMap>(); File [] files = FileUtils.listFilesEndWithout(rootFile, ".tp"); logger.info("根目录:> " + rootDir+" 新文件数:"+files.length); CommonDao dao = null; UpgradeService service = null; try { for(File taskFile : files){ try { Long mid = resoveMissionIdByFileName(taskFile.getName()); List fileNameList = missionFileMaps.get(mid); if(fileNameList == null){ fileNameList = new LinkedList(); missionFileMaps.put(mid, fileNameList); } fileNameList.add(taskFile); String hostIp = Common.getWebIPByMissionId(mid); if(hostIp==null){ if(dao == null){ dao = new CommonDao(); service = new UpgradeService(dao); } hostIp = Constants.FILE_DOWNLOAD_FROM_COMMUNICATE_WEB ? Constants.WEB_SOCKET_IP : service.getHostIpByMissionId(mid); Common.addMissionIdWebIPMap(mid,hostIp); } }catch (NumberFormatException e) { logger.error("Getting the task ID error from the file name["+taskFile.getName()+"]",e); FileUtils.copyFile(taskFile, new File(taskFile.getAbsoluteFile()+".Error.tp")); taskFile.delete(); }catch (Exception e) { logger.error("File:"+taskFile.getName(),e); FileUtils.copyFile(taskFile, new File(taskFile.getAbsoluteFile()+".Error.tp")); taskFile.delete(); } } } catch (Exception e) { logger.error("",e); }finally{ if(dao!=null){ dao.close(); dao=null; } } if(missionFileMaps.size()>0){ Iterator>> ite = missionFileMaps.entrySet().iterator(); while (ite.hasNext()) { Entry> endtry = ite.next(); Future future = Common.getFutureMap().get(rootFile.getAbsolutePath()+endtry.getKey()); if(future != null && !future.isCancelled() && !future.isDone()){ //运行中 logger.info(rootFile.getAbsolutePath()+" 上传文件线程 运行中 不再启动新线程"); }else{ //为空或空闲中 logger.info(rootFile.getAbsolutePath()+" 上传文件线程 空闲中 启动新线程"); String hostIp = Common.getWebIPByMissionId(endtry.getKey()); if(hostIp==null){ hostIp = Constants.WEB_SOCKET_IP; } future = Common.service.submit(new FileUploadThread3("Upload File Thread",hostIp,endtry.getValue().toArray(new File[0]))); //注册 Common.getFutureMap().put(rootFile.getAbsolutePath()+endtry.getKey(), future); } } } } catch (Exception e) { logger.error(ExceptionPrintUtils.printExceptionStack(e)); }finally{ logger.info("操作结束"); } } public static Long resoveMissionIdByFileName(String fileName) { Long missionId = null; if(fileName.lastIndexOf("_T")!=-1){ // System.out.println(fileName.lastIndexOf("_T")); // System.out.println(fileName.lastIndexOf("_")); // System.out.println(fileName.indexOf("_",fileName.lastIndexOf("_T")+1)); String mid = fileName.substring(fileName.lastIndexOf("_T")+2,fileName.indexOf("_",fileName.lastIndexOf("_T")+1)); missionId = Long.parseLong(mid); }else{ String fileName0 = fileName.substring(0,fileName.lastIndexOf("_")); String mid = fileName0.substring(fileName0.lastIndexOf("_")+1,fileName0.length()); missionId = Long.parseLong(mid); } return missionId; } public static void main(String [] args) { // System.out.println("mid "+resoveMissionIdByFileName("tasklist_0_T176_1322424525354")); // System.out.println("mid "+resoveMissionIdByFileName("test_script_T1778_1363762154602994_relative.tar.gz")); // System.out.println("mid "+resoveMissionIdByFileName("tasklist_0__176_1322424525354.txt")); Common.service.submit(new FileUploadManagerThread()); } }