文件分离

来源:互联网 发布:api接口网站源码 编辑:程序博客网 时间:2024/05/22 02:30
需求:
    根据提供的目录信息例如/03/2015_11/aaa.doc;
    在本地寻找对应目录相应的物理文件
    如果这个物理文件存在就把这个文件存储到03/aaa/doc下
package com.hhx;import java.io.File;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import org.apache.log4j.Logger;public class Demo {private static Logger logger = Logger.getLogger(FileDemo07.class);public static final String DBDRIVER = "com.mysql.jdbc.Driver";public static final String DBURL = "jdbc:mysql://localhost:3306/test";public static final String DBUSER = "root";public static final String DBPASS = "root";public static void main(String[] args) throws SQLException {Connection conn = null;Statement stmt = null;ResultSet result = null;conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);stmt = conn.createStatement();result = stmt.executeQuery("select path from table where id > 11096");while (result.next()) {// 判断是否还有下一行String totalNameString = result.getString("path");// 获取数据库person表中name字段的值// String totalNameString="15/2015_05/1431226707756.doc";// 在此目录中找文件String baseDIR = "d:/full_test";String[] strs = totalNameString.split("/");//IDString courtId = strs[0];// 日期文件夹,文件保存的二级目录String dateTime = strs[1];// 找扩展名为txt的文件String fileName = strs[2];List resultList = new ArrayList();findFiles(baseDIR, fileName, resultList);if (resultList.size() == 0) {System.out.println("No File Fount.");logger.error(fileName+"=======没找到");} else {for (int i = 0; i < resultList.size(); i++) {// 存在的文件的绝对路径String path = (String) resultList.get(i);System.out.println(path);// 显示查找结果。File oldFile = new File(path);// 某路径下的文件String newPath = "D://" + courtId + "/" + dateTime + "//";File newFile = new File(newPath);// 新路径下的文件if (!newFile.exists())newFile.mkdirs();// 有就用,没有就新建File theLast = new File(newPath + oldFile.getName());oldFile.renameTo(theLast);}}}}/** * 递归查找文件 *  * @param baseDirName *            查找的文件夹路径 * @param targetFileName *            需要查找的文件名 * @param fileList *            查找到的文件集合 */public static void findFiles(String baseDirName, String targetFileName,List fileList) {File baseDir = new File(baseDirName); // 创建一个File对象if (!baseDir.exists() || !baseDir.isDirectory()) { // 判断目录是否存在System.out.println("文件查找失败:" + baseDirName + "不是一个目录!");  logger.error("文件查找失败:" + baseDirName + "不是一个目录!");  }String tempName = null;// 判断目录是否存在File tempFile;File[] files = baseDir.listFiles();for (int i = 0; i < files.length; i++) {tempFile = files[i];if (tempFile.isDirectory()) {findFiles(tempFile.getAbsolutePath(), targetFileName, fileList);} else if (tempFile.isFile()) {tempName = tempFile.getName();if (wildcardMatch(targetFileName, tempName)) {// 匹配成功,将文件名添加到结果集fileList.add(tempFile.getAbsolutePath());}}}}/** * 通配符匹配 *  * @param pattern *            通配符模式 * @param str *            待匹配的字符串 * @return 匹配成功则返回true,否则返回false */private static boolean wildcardMatch(String pattern, String str) {int patternLength = pattern.length();int strLength = str.length();int strIndex = 0;char ch;for (int patternIndex = 0; patternIndex < patternLength; patternIndex++) {ch = pattern.charAt(patternIndex);if (ch == '*') {// 通配符星号*表示可以匹配任意多个字符while (strIndex < strLength) {if (wildcardMatch(pattern.substring(patternIndex + 1),str.substring(strIndex))) {return true;}strIndex++;}} else if (ch == '?') {// 通配符问号?表示匹配任意一个字符strIndex++;if (strIndex > strLength) {// 表示str中已经没有字符匹配?了。return false;}} else {if ((strIndex >= strLength) || (ch != str.charAt(strIndex))) {return false;}strIndex++;}}return (strIndex == strLength);}}


0 0
原创粉丝点击