首页 > 代码库 > Java扫描指定文件路径下的文件并且递归扫描其子目录下的所有文件
Java扫描指定文件路径下的文件并且递归扫描其子目录下的所有文件
本文主要实现了扫描指定文件路径下的文件,递归扫描其子目录下的所有文件信息,示例文件为:
要求将后缀为.dat的文件夹信息也写入到数据库中,然后将.chk文件解析,将文件中对应的内容读出来写入到数据库,对应类为ChkFileParseFactroy,本文文件发现代码为:
1 package com.src.service.impl; 2 3 import java.io.File; 4 import java.net.InetAddress; 5 import java.net.NetworkInterface; 6 import java.net.SocketException; 7 import java.net.UnknownHostException; 8 import java.text.SimpleDateFormat; 9 import java.util.ArrayList; 10 import java.util.List; 11 import java.util.Date; 12 import java.util.Enumeration; 13 import java.util.LinkedHashMap; 14 import java.util.Map; 15 import java.util.Set; 16 17 import org.slf4j.Logger; 18 import org.slf4j.LoggerFactory; 19 20 import com.src.dao.ChkFileDao; 21 import com.src.dao.FileDao; 22 import com.src.dao.impl.ChkFileDaoImpl; 23 import com.src.dao.impl.FileDaoImpl; 24 import com.src.factory.ChkFileParseFactroy; 25 import com.src.service.FoundFileService; 26 import com.src.util.Config; 27 import com.src.util.UUIDUtil; 28 29 /** 30 * @ClassName: FoundFileServiceImpl 31 * @Description: 扫描文件 32 * @date Aug 24, 2014 1:26:18 AM 33 */ 34 public class FoundFileServiceImpl implements FoundFileService { 35 36 private static Logger logger = LoggerFactory.getLogger(FoundFileServiceImpl.class); 37 private static String interDir; 38 39 /** 40 * @Title: foundFile 41 * @Description: 获取接口文件目录 42 * @最后修改时间:Aug 24, 2014 1:26:50 AM 43 */ 44 public void foundFile() { 45 interDir = Config.getInstance().interDir; 46 if (!isExist(interDir)) { 47 logger.info("The file path " + interDir + " does not exists."); 48 } else { 49 logger.info("The current scanning directory: " + interDir); 50 foundFile(interDir); 51 } 52 } 53 54 /** 55 * @Title: foundFile 56 * @Description: 获取接口文件目录下的文件列表 57 * @最后修改时间:Aug 24, 2014 1:27:40 AM 58 * @param rootStr 59 */ 60 public void foundFile(String rootStr) { 61 62 String host = Config.getInstance().host; // 获取配置文件中的IP地址 63 64 File root = new File(rootStr); 65 File[] file = root.listFiles(); 66 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 67 68 FileDao fileDao = new FileDaoImpl(); 69 ChkFileDao chkFileDao = new ChkFileDaoImpl(); 70 71 /** 接口文件变量 */ 72 String id = null; // UUID 73 String interNo = null; // 接口号 74 String opTime; // 数据日期 75 String interFileName; // 源接口文件名 76 String sourceDir = null; // 源接口文件路径 77 String fileSize; // 源接口文件大小 78 String updateTime; // 源接口文件最后修改时间 79 int status = 6; // 接口文件FTP状态 80 String loadStatus = ""; // 接口文件Load状态 81 82 /** CHK文件变量 */ 83 String totalNum; // 接口记录总数 84 String chkFileSize; // 接口文件总大小 85 int chkFileNum = 0; // 接口文件个数 86 String ftpStatus = ""; // FTP状态 87 88 for (File f : file) { 89 interFileName = f.getName(); // 获取文件名 90 logger.info("The current scan the file: " + interFileName); 91 92 id = UUIDUtil.getUUID(); // 获取ID, Unique 93 sourceDir = f.getAbsolutePath().toString().replace("\\", "/"); 94 95 if (interFileName.endsWith(".dat") || interFileName.endsWith(".DAT")) { 96 updateTime = sdf.format(new Date(f.lastModified())); // 获取接口文件最后修改时间 97 String interID = interFileName.substring(11, 15); // 获取6位接口号 98 List<Map<String, String>> list = fileDao.getInterNoByID(interID); 99 100 for (Map<String, String> map : list) {101 interNo = map.get("FULLINTERCODE");102 }103 104 if ("M".equalsIgnoreCase(interNo.substring(0, 1))) {105 opTime = interFileName.substring(0, 6);106 } else {107 opTime = interFileName.substring(0, 8);108 }109 110 if (-1 != fileDao.insert(id, interFileName,updateTime, interNo, opTime, sourceDir, host,loadStatus, status)) {111 logger.info(" The inter file " + interFileName + " successfully logged into the database.");112 } else {113 logger.info(" The inter file " + interFileName + " already exists in the database.");114 }115 116 }117 118 if (f.isFile()) {119 120 if (interFileName.endsWith(".avl") || interFileName.endsWith(".AVL")) {121 fileSize = Long.toString(f.length()); // 获取文件大小122 updateTime = sdf.format(new Date(f.lastModified())); // 获取接口文件最后修改时间123 interNo = interFileName.substring(0, 6); // 获取6位接口号124 opTime = getOpTime(interFileName); // 获取操作时间125 126 if (-1 != fileDao.insert(id, interFileName, updateTime, interNo, opTime, sourceDir, fileSize, host, loadStatus, status)) {127 logger.info(" The inter file " + interFileName + " successfully logged into the database.");128 } else {129 logger.info(" The inter file " + interFileName + " already exists in the database.");130 }131 132 } else if (interFileName.endsWith(".chk") || interFileName.endsWith(".CHK")) {133 ChkFileParseFactroy chkFileParse = new ChkFileParseFactroy();134 Map<String, String> chkFileMap = new LinkedHashMap<String, String>();135 chkFileMap = chkFileParse.fileParsing(f);136 137 opTime = getOpTime(interFileName); // 获取操作时间138 updateTime = sdf.format(new Date()); // 获取更新时间:系统当前时间139 interNo = interFileName.substring(0, 6);140 chkFileNum = Integer.valueOf(chkFileMap.get("fileNum"));141 totalNum = chkFileMap.get("totalNum");142 chkFileSize = chkFileMap.get("fileSize");143 144 /**145 * 根据interNo和opTime字段判断表中是否存在该记录146 */147 if (!chkFileDao.query(interNo, opTime)) {148 chkFileDao.insert(id, interNo, opTime, chkFileNum, totalNum, chkFileSize, sourceDir, updateTime, ftpStatus, loadStatus);149 logger.info(" The CHK file " + interFileName + " successfully logged into the database.");150 } else {151 logger.info(" The CHK file " + interFileName + " already exists in the database.");152 }153 154 } else {155 logger.info("The file " + interFileName + " is illegal, pass it.");156 }157 } else if (f.isDirectory()) {158 foundFile(f.toString());159 }160 161 }162 }163 164 /**165 * @Title: isExist166 * @Description: 判断文件目录是否存在167 * @最后修改时间:Aug 28, 2014 10:54:13 AM168 * @param filePath169 * @return boolean 返回类型170 */171 public static boolean isExist(String filePath) {172 boolean exists = true;173 File file = new File(filePath);174 if (!file.exists()) {175 exists = false;176 }177 return exists;178 }179 180 /**181 * 182 * @Title: unifiedSeparator183 * @Description: 获取文件路径,统一格式全部都以分隔符结束184 * @最后修改时间:Aug 31, 2014 12:59:54 AM185 * @param interDirectory186 * @return String 返回类型187 */188 public static String unifiedSeparator(String interDirectory) {189 String separator = "/";190 191 if (interDirectory.endsWith(separator)) {192 return interDirectory;193 } else {194 return interDirectory + separator;195 }196 }197 198 /**199 * @Title: getOpTime200 * @Description: 判断是日接口还是月接口,并获取相应的日期; 201 * 月接口:例M24289201408231155 非月接口:A/I/P,I0606920140820230045202 * @最后修改时间:Aug 31, 2014 1:00:16 AM203 * @param interDirectory204 * @return String 返回类型205 */206 public static String getOpTime(String interDirectory) {207 String opTimeString = null;208 try {209 if ("M".equalsIgnoreCase(interDirectory.substring(0, 1))) {210 opTimeString = interDirectory.substring(6, 12);211 } else {212 opTimeString = interDirectory.substring(6, 14);213 }214 } catch (Exception e) {215 logger.info("Failure to obtain the operating time: "216 + e.getMessage());217 }218 return opTimeString;219 }220 221 }
示例演示存储为:
.dat后缀的文件夹和.avl文件存到inter_file_log表中:
.chk文件存到inter_log表中:
本文出自 “Forever Love” 博客,转载请务必保留此出处http://www.cnblogs.com/dwf07223/p/3999225.html。
Java扫描指定文件路径下的文件并且递归扫描其子目录下的所有文件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。