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);
}
}
文件分離
需求:
根據提供的目錄信息例如/03/2015_11/aaa.doc;
在本地尋找對應目錄相應的物理文件
如果這個物理文件存在就把這個文件存儲到03/aaa/doc下
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.