文件分离

需求:
    根据提供的目录信息例如/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("/");
			//ID
			String 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值