⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parsev3filemanager.java

📁 解析特定16进制文件
💻 JAVA
字号:
/******************************************************************************
 * Copyright (c) 2006-2008 Shanghai Datang Mobile Co.Ltd
 * All right reserved.
 *
 * 文件名称:ParseV2FileManager.java
 * 简要描述:解析v2性能数据文件管理类
 *
 * 当前版本:4.00.10
 * 修 改 人:wangxin4
 * 修改说明:
 * 完成日期:2008-7-22
 *
 * 取代版本:
 * 作   者:
 * 完成日期:
 ******************************************************************************/
package com.datangmobile.oss.omc.pc.v3file;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import com.datangmobile.oss.omc.common.server.cm.exception.VIMInitialException;
import com.datangmobile.oss.omc.common.server.cm.proxy.vim.VIMClientService;
import com.datangmobile.oss.omc.pc.ParseFileQueue;
import com.datangmobile.oss.omc.pc.PmConst;
import com.datangmobile.oss.omc.pc.util.FileInfo;
import com.datangmobile.oss.omc.pc.util.FileParserUtil;
import com.datangmobile.oss.platform.jndiresource.client.EJBHomeFactory;
import com.datangmobile.oss.platform.jndiresource.client.ServerInfo;
import com.datangmobile.oss.platform.util.ILogger;
import com.datangmobile.oss.platform.util.ModuleLogger;

/**
 * 解析v3性能数据文件管理类
 * 
 * @author wangxin4
 */
public class ParseV3FileManager {

	/**
	 * 日志
	 */
	private static final ILogger logger = ModuleLogger.getPmLogger()
			.getOperLogger();

	private static ParseV3FileManager _instance = new ParseV3FileManager();

	private ParseV3FileManager() {
	}

	/**
	 * 得到唯一实例
	 * 
	 * @return
	 */
	public static ParseV3FileManager getInstance() {
		return _instance;
	}

	public void init() {
		
		/* 得到信息模型并初始化 */
		try {
			VIMClientService.getInstance().initial();
		} catch (VIMInitialException e) {
			logger.error("get vim info error when init V3 file parse", e);
			return;
		}
		
		// 先处理本地遗留的V3性能数据文件
		dealLocalFile();

		// 启动从FTP获取性能数据文件的定时器
//		try {
//			IGetV3FileTimerHome home = (IGetV3FileTimerHome) EJBHomeFactory
//					.getInstance().lookup(IGetV3FileTimerHome.class,
//							ServerInfo.PM);
//			IGetV3FileTimerLocal getV3DataFileTimer = home.create();
//			getV3DataFileTimer.createTimerWork("get_v3data_file_timer");
//		} catch (Exception e) {
//			logger.error("start get v3 file timer error", e);
//		}

	}

	/**
	 * 处理本地的剩余文件(上次服务器关闭时留下的)
	 * 
	 * @return
	 */
	private void dealLocalFile() {
		// add by liuyuan 2007-9-15 当启动文件解析进程的时候,需要判断当前性能数据文件目录下是否有文件
		// 如果有文件,就表示在解析文件的时候NEPT被中断关闭了,所以需要扫描一下重新加入解析文件的队列
		String path = PmConst.PM_DIR;
		File file = new File(path);
		if (file.exists()) {
			File[] pmFiles = file.listFiles();
			if (pmFiles == null || pmFiles.length == 0) {
				return;
			}
			String[] s = null;
			String netype = null;
			FileInfo fileinfo = null;
			String fileName = null;
			logger.info(ParseV3FileManager.class, "初始化文件解析进程获取本地性能数据文件:\n");
			for (int i = 0; i < pmFiles.length; i++) {
				fileName = pmFiles[i].getName();
				if (pmFiles[i].isFile()
						&& ScanV3PerDataFile.getInstance()
								.isV3PerData(fileName)
						&& !fileName.endsWith(".bad")) {
					logger.info(ParseV3FileManager.class, pmFiles[i].getPath());

					s = fileName.split("_");
					netype = s[1].toUpperCase();

					/* 把成功下载的文件名加入解析队列中 */
					String fileType = "";
					if (fileName.startsWith(PmConst.PM_V3_DATA_FILE_PREFIX)) {// 性能统计上报文件
						fileType = PmConst.PM_V3_DATA_FILE;
					} else if (fileName.startsWith(PmConst.PM_V3_CDL_FILE_PREFIX)) {// 小区对上报文件
						fileType = PmConst.PM_V3_CDL_FILE;
					}

					// add by liuyuan 2008-3-21 加入对性能数据文件的处理(zip格式)
					// CNBUG00018019
					if (fileName.endsWith(PmConst.PM_ZIP)) {// 压缩文件
						File dir = new File(System.getProperty("user.dir")
								+ File.separator + PmConst.PM_DIR);
						try {
							ArrayList<String> files = FileParserUtil
									.unzipFile(dir.getAbsolutePath()
											+ File.separator, fileName);
							for (String string : files) {
								fileinfo = new FileInfo();
								String t = string.substring(string
										.lastIndexOf(File.separator) + 1);
								fileinfo.setFile(new File(path + File.separator + t));
								fileinfo.setNeType(netype);
								fileinfo.setFileType(fileType);
								fileinfo.setDn(FileParserUtil.getNeDn(t));
								// 将这些info发如待解析的队列中
								ParseFileQueue.getInstance().putParseFile(
										fileinfo);
							}
							new File(path + File.separator + fileName).delete();
						} catch (IOException e) {
							logger.error("解压文件到PM目录失败!" + fileName, e);
						}
					} else {// 可直接解析的二进制文件
						fileinfo = new FileInfo();
						fileinfo.setFile(new File(path + File.separator + fileName));
						fileinfo.setNeType(netype);
						fileinfo.setFileType(fileType);
						fileinfo.setDn(FileParserUtil.getNeDn(fileName));
						// 将这些info发如待解析的队列中
						ParseFileQueue.getInstance().putParseFile(fileinfo);
					}			
				}
			}
		}

	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -