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: isExist
166      * @Description: 判断文件目录是否存在
167      * @最后修改时间:Aug 28, 2014 10:54:13 AM
168      * @param filePath
169      * @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: unifiedSeparator
183      * @Description: 获取文件路径,统一格式全部都以分隔符结束
184      * @最后修改时间:Aug 31, 2014 12:59:54 AM
185      * @param interDirectory
186      * @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: getOpTime
200      * @Description: 判断是日接口还是月接口,并获取相应的日期;
201      * 月接口:例M24289201408231155 非月接口:A/I/P,I0606920140820230045
202      * @最后修改时间:Aug 31, 2014 1:00:16 AM
203      * @param interDirectory
204      * @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

时间: 2024-10-06 14:30:18

Java扫描指定文件路径下的文件并且递归扫描其子目录下的所有文件的相关文章

无法将“Global.asax”添加到网站。 无法添加文件“Global.asax”。 系统找不到指定的路径。 无法将“packages.config”添加到网站。 无法添加文件“packages.c

发布ASP.net 项目时遇到的问题, !!!!!!!!1 无法将“Global.asax”添加到网站. 无法添加文件“Global.asax”. 系统找不到指定的路径. 无法将“packages.config”添加到网站. 无法添加文件“packages.c.... !!!!!!!!!!!! 清理下项目就好! 无法将"Global.asax"添加到网站. 无法添加文件"Global.asax". 系统找不到指定的路径. 无法将"packages.conf

qt获取指定目录下符合条件的文件路径

1)设置名称过滤器 QDir * dir = new QDir(路径); QStringList filter; Filter << QStringLiteral(“筛选的文件条件,如.xls...”); dir->setNameFilters(filter); 2)获取指定条件的条目 QList<QFileInfo> *fileInfo = new QList<QFileInfo>(dir->entryInfoList(filter)); for(size

java获取src下文件路径和获取webRoot下文件路径

获取src下的fileurl.properties文件路径 this.getClass().getResource("/fileurl.properties").getPath() 获取webRoot下的service文件夹路径 request.getSession().getServletContext().getRealPath("/service");

[MAC] Mac OS X下快速复制文件路径的方法

在windows上复制当前目录的路径有一个特别方便的方式,只需要用鼠标点击路径栏,它就会自动变成像”D:\Downloads\tmp”这样的路径,如果要复制文件路径,只需要将目录路径和文件名拼接起来即可,Linux上也很方便,readlink -f yourfile就会打印出文件的绝对路径,虽然Mac也可以在命令行下使用greadlink(Mac上自带的readlink和Linux上功能不一样,greadlink意思是GNU’s readlink,和Linux上的readlink功能一致),但这

在目录及其子目录下寻找匹配的文件的python实现

目录及其子目录下寻找匹配的文件的python实现 python中在目录及其子目录下寻找匹配的文件,这是一个小练习 题目如下: (1)编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径 代码如下: #寻找指定目录下(包含子目录)中的文件名含有指定字符串的文件,并打印出其相对路径 #coding:utf-8 import os def my_find(s,root='.'): dirs=[]#用来保存目录 matchs=[]#用来保存匹配字符串的文件

gcc在编译时头文件路径和动态链接库路径

在使用gcc编译连接生成可执行文件时,经常会碰到变量未定义.链接时或者运行可执行文件时找不到相应的动态库等问题,本文首先介绍了gcc在编译时头文件路径相关选项以及搜索路径顺序,然后讨论了编译成可执行文件时动态库的搜索路径顺序,最后说明了生成可执行文件后,运行文件时动态库的搜索路径顺序.搞清楚这三个搜索路径,在用gcc碰到的未定义变量或搜索不到动态库的问题,基本上都可以解决了. 头文件路径编译时相关选项 gcc可以使用选项-I(注意是大写)来指定头文件搜索路径,即头文件所在的文件夹.指定的路径即可

写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名?pathinfo文件路径&amp; parse_url解析url &amp; basename路径中文件名

例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php 方案1 <?php function getExt($url){ $arr = parse_url($url); $file = basename($arr['path']); $ext = explode(".",$file); return $ext[1]; } echo getExt("http://www.sina.com.cn/abc/d

Excel公式 提取文件路径后缀

我们在代码中获取一个文件路径的后缀,是一个很简单的事. 如C#中,可以通过new FileInfo(filePath).Extension,或者Path.GetExtension(filePath)获取. 而Excel的大数据中,直接批量获取同行单元格内容中文件路径的后缀,该如何获取? 如上,想获取文件后缀,然后从中分析出文件的所属开发语言. 公式如下: 1.获取后缀 =RIGHT(D2,LEN(D2)-FIND("@",SUBSTITUTE(D2,".",&quo

向右键菜单中添加复制文件路径

复制文件路径本来可以按住shift 右击,不过还是有点麻烦,这里提供一种可以一次添加永久使用的方法. 打开记事本: Windows Registry Editor Version 5.00 ;文件[HKEY_CLASSES_ROOT\*\shell\copypath]@="复制文件路径" [HKEY_CLASSES_ROOT\*\shell\copypath\command]@="mshta vbscript:clipboarddata.setdata(\"text